Node.js(Express API):req.body.myobject 未定义且无法正常工作

Posted

技术标签:

【中文标题】Node.js(Express API):req.body.myobject 未定义且无法正常工作【英文标题】:Node.js (Express API): req.body.myobject is undefined and not working 【发布时间】:2015-10-04 13:22:26 【问题描述】:

我在 NodeJS (ExpressJS) 中有我的服务器端,它实现了一个 POST 方法,该方法应该获取我从客户端发送的对象并对其进行处理:

router.route('/email')
// create a mail (accessed at POST http://localhost:8080/api/email)
.post(function(req, res) 
    var email = req.body.email;
    // do things with email...
    // but it's complaining because it says it's 'undefined'
);

req.body.email 应该是具有这种结构的 JSON 对象:

"destinatary": "my@example.com", "subject": "mysubject", "message": "mymessage"

我使用 jQuery 实现了一个非常简单的 Web 客户端来测试我的 API,其中 AJAX 调用是这样完成的:

function sendEmail(email) 
  $.post(MYAPP.service_uri+"/email",
    email,
    function(data, status)
        alert("Data: " + data + "\nStatus: " + status);
    );

在客户端,email 是一个对象,所以它不是 undefined... 但我每次在服务器端都会收到以下错误:

TypeError: Cannot read property 'destinatary' of undefined

【问题讨论】:

@Tushar 我在正文中发送 JSON 对象 【参考方案1】:

因为您没有发送任何名为 email 的内容 - 您正在附加一个变量名称为 email 的对象

要修复您的 AJAX 调用,您可以执行以下操作:

$.post(MYAPP.service_uri+"/email",
    email: email, //OBJECT, KEYVAL PAIR
    function(data, status)
        alert("Data: " + data + "\nStatus: " + status);
    
);

原始代码中的对象将存储为纯 req.body - 而不是 req.body.email

如果不想修复 AJAX 调用,可以修复服务器:

router.route('/email')
// create a mail (accessed at POST http://localhost:8080/api/email)
.post(function(req, res) 
    var email = req.body;
);

任何一个都可以。

【讨论】:

完全...我错过了!通过获取req.body,它起作用了。谢谢!

以上是关于Node.js(Express API):req.body.myobject 未定义且无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Node.js, express, html form req.body 未定义

Node.js:req.params 与 req.body

CRUD RESTful API(Node.js,Express,Mongodb)中的删除错误

在express,node.js中使用req.ip将IP地址列入白名单是不是安全?

如何从express node.js中的对象req数据转换为字符串

使用Express node.js的post表单接收req.body为空。