node.js在异步请求中缺少post数据

时间:2012-11-16 09:56:22

标签: javascript node.js post

我在Node.js中创建一个简单的表单。其他一切似乎都正常工作,但是应该接收post请求数据的函数永远不会被调用。以下是相关的代码段:

if (request.method == 'POST') {
    var body = '';
    console.log(request.body);
    request.on('data', function (chunk) {
        console.log("got the post request data"); //nothing logged to console
        body += chunk;
    });
    request.on('end', onRequestEnd(body, response));
}

函数onRequestEnd会被调用,但是稍后我的代码会在参数体中只有一个空字符串时中断。关键字“数据”是否正确?

代码是从这里的答案修改而来的:How do you extract POST data in Node.js?。如果需要,我会发布更多内容。

2 个答案:

答案 0 :(得分:1)

经过很多挫折之后,我自己解决了这个问题!

我换了一行:

request.on('end', onRequestEnd(body, response));

为:

request.on('end', function() {
        onRequestEnd(body, response);
    });

它与回调有关。我不确定为什么会这样,而另一个则不然。这就是我的感受:http://www.masti-xpress.com/images/Story-of-Every-Programmer.jpg

答案 1 :(得分:0)

我将分享我是如何解决这个问题的。 我对此有另一种观点,我也会分享它。 我想要的是在我的“视图”中有这样的东西。

app('/urlToView', function(req, response){
    request.on('end', function() {
        var post = **request.data;** //sanitize data
        resolver.renderTemplateOr404('start.html', post, request, response);
    });
}

request.data 是重要的事情。 但是我还没有真正解决如何在我的视图中“不”拥有request.on('end'...)

为什么console.log()将如何处理你完成所有这些工作的函数的回调的原因。

当我启动服务器时,我在我的视图中劫持了请求

self.preProcess(self, request, response);

preProcess: function onRequest(app, request, response){ 
     processor.preRequest(request);
}

最后是我执行的preRequest()函数

if (request.method === 'POST') {
    var postdata = "";
    request.on('data', function(postdataChunk){
         postdata += postdataChunk;
    });
    request.on('end', function(){
        _transformRequest(request, _transformPostdata(postdata)); //this is to set the data on the request
    });
}

并在此处添加console.log(postdataChunk);不是问题,因为所有回调都已正确处理。

另外,这对我来说可能是非常愚蠢的但是你知道那个console.log();不输出到浏览器,但输出到终端窗口?

这可能不是你的确切答案,但我希望这有点帮助。