4

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

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 确实被调用了,但后来我的代码在参数正文中只有一个空字符串时会中断。关键字“数据”是否正确?

代码是根据此处的答案修改的:如何在 Node.js 中提取 POST 数据?. 如果需要,我会发布更多。

4

2 回答 2

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

于 2012-11-19T19:13:22.330 回答
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
    });
}

并且在这里添加 aconsole.log(postdataChunk);不是问题,因为所有回调都得到了正确处理。

另外,我问这个问题可能很愚蠢,但你知道 console.log(); 不输出到浏览器而是输出到终端窗口?

这对您来说可能不是一个确切的答案,但我希望这会有所帮助。

于 2012-11-16T10:34:51.063 回答