我在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?。如果需要,我会发布更多内容。
答案 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();不输出到浏览器,但输出到终端窗口?
这可能不是你的确切答案,但我希望这有点帮助。