从webUI到Node.JS对POST无响应

时间:2018-07-06 01:45:50

标签: javascript json node.js rest

我遇到了一个难题,试图了解Ajax POST到Node.JS的断开连接以及对它的express()响应之间的连接。例如:

客户:

var posting = $.post( "http://localhost:3000/put/requestList" , { first_name: "John", last_name: "Mensa", gender : "Male" })
    .done(function( data ) {
  $( "#schemesdisplay" ).append("Response sent!");
});

服务器:

//configure body-parser for express
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

//allow express to access our html (index.html) file
app.get('/ui/index.html', function(req, res) {
res.sendFile(__dirname + "/" + "index.html");
});
app.post('/put/requestList', function(req, res){
 response = {
  first_name : req.body.first_name,
  last_name : req.body.last_name,
  gender: req.body.gender
 };
 res.end(JSON.stringify(response + "Server Responds!"));
});
var server = app.listen(3000, function(){
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port);
});

在服务器的控制台中,我可以看到客户端提交的数据。但是,没有迹象表明服务器已响应,更不用说如何将其返回到div了,我需要响应才能进入。

理想情况下,我需要将UI的JSON块发送到Node.JS服务器,然后再返回。然而,事实证明,在两个完全不同的环境中进行这种简单的通信是一个挑战。

任何(有用的)建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要替换此行

res.end(JSON.stringify(response + "Server Responds!"));

与此

res.json(response);

res.end()将结束响应过程。该方法实际上来自Node核心,特别是http.ServerResponse的response.end()方法。它用于快速结束没有任何数据的响应。

您可能还需要更改jQuery邮政编码,以包含用于发布json的标头:

$.ajax({
    type: "POST",
    url: "http://localhost:3000/put/requestList",
    data: JSON.stringify({ first_name: "John", last_name: "Mensa", gender : "Male" }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){
        $( "#schemesdisplay" ).append("Response sent!");
    },
    failure: function(errMsg) {
        $( "#schemesdisplay" ).append("ERROR!");
    }
});