将Jquery数据发布到Express

时间:2012-12-19 12:23:49

标签: javascript jquery json node.js express

无论req.params / req.query / req.body和$ .post({..}我使用什么组合,我都无法从快递中的Jquery帖子请求中提取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);
....

我尝试过无数次访问数据电子邮件和名称但没有成功。如果解决方案是对req.body / req.params的简单修改,我会感到惊讶,但一切皆有可能!数据不存在! (它也没有出现在我的网址中 - 我看到的只有localhost:1337)

req.body / req.params / req.param.params / req.params 全部返回 未定义和req.query 返回 [] 即可。

req.route 返回

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

我尝试添加:

app.use(express.bodyParser()); 

但是,诚然,我并不完全明白其目的。非常感谢任何帮助。

节日快乐! //山姆

1 个答案:

答案 0 :(得分:1)

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

app.use(express.bodyParser());

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

表达方式的工作方式是每个请求都通过中间件和路由按照它们声明的顺序向下流动。由于bodyParser()中间件现在在您的路由之前声明,它将有机会将请求的主体解析成一个漂亮的JSON格式,将解析后的值粘贴到req.body,然后传递控制到下一个路线/中间件;否则,req.body根本就不存在。