首页 > 解决方案 > 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;

标签: javascriptnode.jsreactjsnext.js

解决方案


请删除将 bodyParser 返回为 false 的配置函数。因为将其提及为 false 会停止从请求中解析正文。

  • 我想你已经解决了这个问题。不过提一下。

推荐阅读