javascript - NEXTJS - 无法解构“req.body”的属性“名称”,因为它未定义。(补丁方法)
问题描述
我尝试从 setting.js 获取信息以执行 PATCH 方法,但我收到错误消息。
Cannot destructure property 'name' of 'req.body' as it is undefined.
在设置中,我有另一种 PUT 方法来更改密码。PUT 方法工作正常,但要编辑名称和简历,我尝试使用 PATCH 方法但出错。
我该如何解决这个问题?
下面是来自 setting.js 和 api/user/index.js 的代码
设置.js
const handleSubmit = async (event) => {
event.preventDefault();
if (isUpdating) return;
setIsUpdating(true);
const formData = new FormData();
formData.append('name', nameRef.current.value);
formData.append('bio', bioRef.current.value);
const res = await fetch('/api/user', {
method: 'PATCH',
body: formData,
});
if (res.status === 200) {
const userData = await res.json();
mutate({
user: {
...user,
...userData.user,
},
});
setMsg({ message: 'Profile updated' });
} else {
setMsg({ message: await res.text(), isError: true });
}
};
api/用户/index.js
import nextConnect from 'next-connect';
import middleware from '../../../middlewares/middleware';
import { extractUser } from '../../../lib/api-helpers';
const handler = nextConnect();
handler.use(middleware);
handler.get(async (req, res) => res.json({ user: extractUser(req) }));
handler.patch(async (req, res) => {
if (!req.user) {
req.status(401).end();
return;
}
const { name, bio } = req.body;
await req.db.collection('users').updateOne(
{ _id: req.user._id },
{
$set: {
...(name && { name }),
bio: bio || '',
},
},
);
res.json({ user: { name, bio } });
});
export const config = {
api: {
bodyParser: false,
},
};
export default handler;
解决方案
请删除将 bodyParser 返回为 false 的配置函数。因为将其提及为 false 会停止从请求中解析正文。
- 我想你已经解决了这个问题。不过提一下。
推荐阅读
- swift - 如何从 if-else 或 switch case 返回多个值
- azure - 使用 Azure Forms Recognizer 进行多页表隔离
- responsive - Vector skine mediawiki 对移动设备没有响应
- sql - 为什么本机查询有效而 hql 查询无效
- reactjs - 当前页面的数量在反应中没有改变
- ios - 在 UILabel 上使用段落 headIndent 并手动包装文本
- java - spring boot 视图在没有文件扩展名的情况下不起作用?
- sql - SQL 显示一条记录是否存在于多个表中
- purescript - 使用 Argonaut 在 PureScript 中解析 JSON
- google-sheets - IIMPORTRANGE 将包含新行的单元格导入为空单元格