5

无论我使用什么 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);
....

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

req.body / req.params / req.param.params / req.params都返回 undefined并且 req.query返回 []

req.route返回

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

我试过添加:

app.use(express.bodyParser()); 

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

节日快乐!//山姆

4

1 回答 1

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()
});

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

于 2012-12-19T21:29:03.673 回答