将 Jquery 数据发布到 Express

Posted

技术标签:

【中文标题】将 Jquery 数据发布到 Express【英文标题】:Posting Jquery Data to Express 【发布时间】:2012-12-06 19:22:30 【问题描述】:

无论我使用什么 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 express 代码:

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

但是,诚然,我并不完全理解它的目的。非常感谢任何帮助。

节日快乐! // 山姆

【问题讨论】:

也许这会对您有所帮助? ***.com/questions/5710358/… bodyParser 中间件是从 POST 正文初始化 req.body 的中间件,因此您确实需要它。确保在安装路线之前使用它(即在您执行app.use(app.router) 或您的第一个app.get/app.post 等电话之前)。 Linus 所说的,请确保在您的配置中设置 bodyParser 在您的路由之前。 你知道什么!那解决了它。 app.use(express.bodyParser()); 必须在第一个 app.get/post 之前出现。非常感谢! 【参考方案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 将根本不存在。

【讨论】:

以上是关于将 Jquery 数据发布到 Express的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 将数据发布到类

使用 Ajax、jQuery 将数据发布到 Django

将数据库添加到 jquery 移动站点

将 jQuery 数组发布到 Django

将 Jquery 数据发布到 Express

使用jquery将数据从视图传递到控制器