【问题标题】:nodeJS code not functioning properly in API modenodeJS 代码在 API 模式下无法正常运行
【发布时间】:2021-01-02 18:02:49
【问题描述】:

我有在服务器上完美运行的 CRUD 代码,但是当我将这些代码转换为 API 的等效版本时,其中之一,用于提交代码的 postsCreate 方法拒绝提交发送到数据库的数据不断返回错误,所以我 console.log req.body.title, req.body.user and req.body.postContent 看看发生了什么;唉,令我惊讶的是,它返回了这个 { title: undefined, user: undefined, postContent: undefined } ,所以我 console.log(req.body) 并在控制台中返回了这个:

[Object: null prototype] {
  '{\n"title": last last",\n"user": Gbenga",\n"postContent": "He go work"\n}': ''
}

这就是方法。 (与服务器版本相同。)

const postsCreate = (req, res) => {
  const tru = ({
    title: req.body.title,
    user: req.body.user,
    postContent: req.body.postContent
  });

  console.log(req.body);  // produces this [Object: null prototype] {'{\n"title": last last",\n"user": Gbenga",\n"postContent": "He go work"\n}': ''}
  console.log(tru);  // produces this { title: undefined, user: undefined, postContent: undefined }

  Post.create({
      title: req.body.title,
      user: req.body.user,
      postContent: req.body.postContent
    },
    (err, post) => {
      if (err) {
        res
          .status(400)
          .json(err);
      } else {
        res
          .status(201)
          .json(post);
      }
    });
};

到底发生了什么?为什么它直接从服务器提交并且从API连接时拒绝这样做,最后我该怎么做才能解决它? 附言我通过 POSTMAN 应用对其进行了测试

【问题讨论】:

    标签: javascript node.js postman


    【解决方案1】:

    我认为正在发生的事情是请求的正文没有被正确解析。请注意,您拥有的 request.body 的值是一个如下所示的对象:

    {
      "{ ... the data you want ... }": ""
    }
    

    整个主体显示为对象中单个属性的名称

    因此,我认为期望来自表单的名称=值对的正文解析器改为接收 JSON。当它在寻找 = 时,它会将所有内容都读取为名称,然后因为没有 = 它使用空字符串作为值,从而使您看到的对象。它不理解 JSON,所以它不会为 title、user 和 postContent 创建属性,所以这些是未定义的。

    要解决此问题,请确保您有一个能够理解 JSON 的正文解析器,正如 @r7r 所解释的那样,并且客户端使用标头 Content-Type: application/json 发送其 JSON。

    【讨论】:

      【解决方案2】:

      在导入后开始的代码中添加这一行

      If you are using Express 4.16+
      app.use(express.json()); //Used to parse JSON bodies
      

      else install body-parser,导入文件,使用

      npm install --save body-parser
      

      const bodyparser = require('body-parser');
      
      app.use(bodyparser.json());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多