JSONP req.body不起作用

时间:2015-12-01 15:21:43

标签: json node.js post jsonp

当我点击角度侧的按钮时,我正在使用nodejs和angular它创建了一个json帖子,但由于跨域问题,我使用JSONP。当我试图通过JSONP获取我从客户端发送的数据时,我得到类似的东西;

{ '{"userName": "something", "password" : "123"}': '' }

我是从我的server.js上的req.body获得的。

这是我的服务器端代码

    app.post('/', function(req,res){
  console.log("consoleeee:" + req.body);
  res.end();
});

这里我的客户端功能在单击按钮时起作用

function loginPageLogin(a, b, c, d, e, f, g, h, i, j) {

    $.ajax
    ({
        type: "POST",
        url: 'http://localhost:777/node',
        dataType: 'jsonp',
        async: false,
        data: '{"userName": "' + a.value + '", "password" : "' + b.value + '"}'
    })

我如何正确获得req.body?我希望它作为对象。谢谢......

2 个答案:

答案 0 :(得分:1)

无法使用JSONP传输POST json数据,因为JSONP请求是通过附加< script>来发送的。标记到页面正文,意味着post params无法发送,只能获得params。这也意味着您发送的数据需要是键/值对,而不是JSON。它也不能同步。

因此,您需要决定是否要使用适当的CORS设置进入JSONP路由或JSON路由。如果是JSONP,请将paypload组织为对象,而不是json,如果是json,请修改服务器以通过添加CORS中间件来正确处理CORS。

答案 1 :(得分:-1)

您需要更改data,因此它会推送一个对象而不是字符串:

$.ajax
    ({
        type: "POST",
        url: 'http://localhost:777/node',
        dataType: 'json',
        async: false,
        data: {userName: a.value, password: b.value}
    })