【问题标题】:POSTing json to express using jQuery使用 jQuery 发布 json 来表达
【发布时间】:2013-05-06 01:58:33
【问题描述】:

我在将 JSON 数据从客户端发送到运行 express 的节点服务器时遇到问题。

这是一个演示我的问题的简单服务器:

var express = require('express');

var app = express();

app.configure(function(){   
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.logger());
});

app.listen(80);

app.post('/', function(req,res){
    console.log(req.body);
    console.log(req.body.number + 1);
});

此服务器只是将所有 POST 数据记录到控制台。

如果我将以下内容粘贴到 chrome 的开发控制台中: $.post('/', {number:1});

服务器打印出来:

{ number: '1' }
11

如何阻止我传递的数字被解释为字符串? 这与我正在使用的 bodyParser 中间件有关吗?

任何帮助表示赞赏!

【问题讨论】:

    标签: json node.js post express


    【解决方案1】:

    $.post发送的是url编码的数据,所以真正发送的是number=1,然后被bodyParser中间件解析。

    要发送 json,您必须使用 JSON.stringify({number:1})

    不幸的是,使用$.post 不会设置适当的Content-Type 标头(express 无论如何都会处理它),所以最好使用:

    $.ajax({
        url: '/', 
        type: 'POST', 
        contentType: 'application/json', 
        data: JSON.stringify({number:1})}
    )
    

    【讨论】:

    • 并且不要忘记添加 contentType: 'application/json' 标头,否则服务器的 req.body 中将根本没有数据。
    • @soulcheck 你能看看我的问题吗? stackoverflow.com/questions/47085674/… 和这个类似,但是我需要用数组发送另一个属性
    • Christiaan Westerbeek 对这笔钱的评论。不要混淆 json: true 和 contentType: 'application/json'。不是一回事。如果您希望它工作,请添加 contentType: 'application/json'。
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多