【问题标题】:Express Not able to get request body valueExpress 无法获取请求正文值
【发布时间】:2016-08-01 03:37:16
【问题描述】:

我正在尝试通过使用带有 express 和 mongoose 的 REST Api 的 CRUD 操作教程来学习 MEAN 堆栈。我能够运行 GET 和 DELETE 操作,但我没有获得 POST 和 PUT 操作,因为我没有获得所需的请求正文值。

router.post('/', function (req, res, next) {
var todoObject = {
    name: req.body.name
};
Todo.create(todoObject, function (err, todo) {
    if (err) res.send(err);
    Todo.find(function (err, todos) {
        if (err) res.send(err);
        res.json(todos);
    });
});  });

从代码中可以看出,我正在使用通过 POSTMAN 传递的请求正文值设置 json 对象的名称参数。正在创建一个新文档,但名称值未在数据库中设置。
但是,直接命名是有效的。请帮帮我。

【问题讨论】:

  • 你使用bodyParser吗?
  • 是的,我确实使用了 bodyParser。
  • 您是否尝试过todoObject = req.body,并假设您的身体包含您打算放入数据库的内容
  • 是的,我尝试过使用todoObject = req.body,但没有成功。所以,我尝试了上面的方法。
  • 您确定您的todoObject 变量在其回调函数之外有一个作用域生命周期吗?尝试在回调函数外初始化变量,看看是否还能得到值。

标签: node.js express mongoose


【解决方案1】:

如果是 JSON 格式,您需要在 Headers 中使用 Content-Type: application/json

【讨论】:

    【解决方案2】:

    最简单和最安全的方法是使用 RAW 数据从客户端发送 JSON 对象。

    所以,要实现它,请按照以下步骤操作:

    • 在 Headers 中将 Content/type 设置为 application/json
    • 选择原始类型并将您的 JSON 对象放入正文中
    • 最后你的代码应该是这样的:

       router.post('/', function (req, res, next) {
      
          var todoObject = req.body; 
      
          Todo.create(todoObject, function (err, todo) {
      
                      if (err) res.send(err);
                      Todo.find(function (err, todos) {
                          if (err) res.send(err);
                          res.json(todos);
                      });
                  }); 
               });
      

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2015-10-15
      • 2020-11-04
      • 2023-01-19
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2019-07-14
      相关资源
      最近更新 更多