将jquery数据发布到Express

无论req.params / req.query / req.body和$ .post({..}我使用什么组合,我都无法从我的Jquery post请求中快速提取JSON数据。

这是我的jQuery

$.post("/mail", {email : "s@gmail.com", name : "s@gmail.com"}); 

我也尝试了各种排列:

 $.ajax({type: "POST", url: "/mail", dataType :"json", data : {email : "s@gmail.com", name : "s@gmail.com"}}); 

这是我的node.js 表示代码:

 app.post("/mail", function(req, res) { console.log(req.body.name); console.log(req.route); console.log("params1: " + req.param.params); .... 

我尝试了无数的方式来访问数据电子邮件和名字没有成功。 如果解决scheme是req.body / req.params的简单修改,但是任何事情都是可能的,我会感到惊讶! 数据只是不存在! (它不会出现在我的url – 我看到的只是本地主机:1337)

req.body / req.params / req.param.params / req.params all return undefined and req.query returns []

req.route 返回

 { path: '/mail', method: 'post', callbacks: [ [Function] ], keys: [], regexp: /^\/mail\/?$/i, params: [] } 

我试过添加:

 app.use(express.bodyParser()); 

但是,诚然,我不完全明白它的目的。 任何帮助是极大的赞赏。

节日快乐! //山姆

您必须在任何使用它的路由之前添加bodyParser()中间件,如下所示:

 app.use(express.bodyParser()); app.post('/mail', function(req, res) { console.log(req.body); // the body attribute will be created by the bodyParser() }); 

expression式的工作方式是,每个请求都通过中间件传递,并按照声明的顺序进行路由。 由于bodyParser()中间件现在已经在路由之前被声明,所以它有机会将请求的主体parsing成一个很好的JSON格式,将parsing后的值粘贴到req.body ,然后将控制权交给下一个路由/中间件; 否则, req.body将根本不存在。