无法通过 next-http-proxy-middleware 传递请求正文
Can't pass request body through next-http-proxy-middleware
我一直在尝试使用 nextjs 创建一个前端,我在 Java 中有 运行 个后端。
我正在使用 npm 包 next-http-proxy-middleware,似乎我的请求正文被删除或者我使用的包不正确。
这是我的全部 ./src/api/[...all].ts 文件
import type { NextApiRequest, NextApiResponse } from 'next'
import httpProxyMiddleware from 'next-http-proxy-middleware'
type Data = {
name: string
}
export const config = {
api: {
externalResolver: true,
},
}
export default (req: NextApiRequest, res: NextApiResponse) => {
httpProxyMiddleware(req, res, {
target: `http://${process.env.REACT_APP_URL}`,
changeOrigin: true,
})
}
这是我尝试登录的代码片段,提供此数据的表单是使用 react-hook-form
构建的
const onSubmit: SubmitHandler<Inputs> = async (data: any) => {
//console.log('username', watch('username'), 'password', watch('password'))
const response = await axios.post(
'/api/session',
new URLSearchParams({
email: data.username,
password: data.password,
})
)
}
我确实看到它正在连接到我的后端,因为我收到一个由我的 Java 程序而非 next.js 生成的错误,但它只是告诉我电子邮件为空这让我相信我的参数在翻译中丢失了
"Cannot invoke \"String.trim()\" because \"email\" is null - NullPointerException (DataManager:149 < PermissionsManager:508 < SessionResource:111 < ...)"
我能够使用 vanilla react 让它工作,所以我确定这是我在实施 next-http-proxy-middleware 时做错的事情,但我一直在用头撞墙这个有点太长了。感谢所有的帮助,谢谢!
我想出了解决办法,我觉得有点傻,因为没有早点意识到:
https://github.com/vercel/next.js/discussions/11036
Nextjs 带有自动正文解析器,我不得不禁用它。
export const config = {
api: {
externalResolver: true,
bodyParser: false,
},
}
我一直在尝试使用 nextjs 创建一个前端,我在 Java 中有 运行 个后端。
我正在使用 npm 包 next-http-proxy-middleware,似乎我的请求正文被删除或者我使用的包不正确。
这是我的全部 ./src/api/[...all].ts 文件
import type { NextApiRequest, NextApiResponse } from 'next'
import httpProxyMiddleware from 'next-http-proxy-middleware'
type Data = {
name: string
}
export const config = {
api: {
externalResolver: true,
},
}
export default (req: NextApiRequest, res: NextApiResponse) => {
httpProxyMiddleware(req, res, {
target: `http://${process.env.REACT_APP_URL}`,
changeOrigin: true,
})
}
这是我尝试登录的代码片段,提供此数据的表单是使用 react-hook-form
构建的const onSubmit: SubmitHandler<Inputs> = async (data: any) => {
//console.log('username', watch('username'), 'password', watch('password'))
const response = await axios.post(
'/api/session',
new URLSearchParams({
email: data.username,
password: data.password,
})
)
}
我确实看到它正在连接到我的后端,因为我收到一个由我的 Java 程序而非 next.js 生成的错误,但它只是告诉我电子邮件为空这让我相信我的参数在翻译中丢失了
"Cannot invoke \"String.trim()\" because \"email\" is null - NullPointerException (DataManager:149 < PermissionsManager:508 < SessionResource:111 < ...)"
我能够使用 vanilla react 让它工作,所以我确定这是我在实施 next-http-proxy-middleware 时做错的事情,但我一直在用头撞墙这个有点太长了。感谢所有的帮助,谢谢!
我想出了解决办法,我觉得有点傻,因为没有早点意识到:
https://github.com/vercel/next.js/discussions/11036
Nextjs 带有自动正文解析器,我不得不禁用它。
export const config = {
api: {
externalResolver: true,
bodyParser: false,
},
}