我已经从response.on('data'...
传递了postData对象,只要我使用console.log()
,这一切都很好。但是,当我尝试使用postData.toString()
或将其传递给response.write()
时,它会被视为未定义。我对这种行为感到很困惑。
upload = function(response, postData) {
response.writeHead(200, {'Content-Type': 'text/plain'});
console.log(postData); // outputs the data that was posted
console.log(typeof postData); // outputs string
var item = postData; // successfully sets item equal to postData
console.log(item); // outputs the data as expected
console.log(typeof item); // outputs string
response.write('You\'ve sent: ' + item); //writes "You've sent: undefined"
response.end();
}
我的完整代码位于:Node.js request data event not firing. What am I doing wrong?
我不知道我是否导致了问题,或者使用了弃用的方法或者是什么。请帮忙。
谢谢。
答案 0 :(得分:1)
问题似乎是within the createServer()
callback,它试图route()
每个request
和response
两次 - 一次没有postData
,一次是:< / p>
http.createServer(function(request, response) {
// ...
// routes to `upload()` without a 4th argument
// so, `postData` will be `undefined`
route(handle, pathname, response);
// ...
request.on('end', function(postDataChunk) {
// ...
// routes to `upload()` again, this time with `postData`
route(handle, pathname, response, postData);
});
}).listen(portToUse);
由于每次调用route()
,然后upload()
,正在尝试write()
和end()
response
,只有2个中的第一个会实际上能够write()
任何事情。
这是因为response.write()
在调用response.end()
后无法执行任何操作,并关闭net.Socket
后面的response
。
但是,console.log()
没有此依赖关系,因此您应该看到两个调用的日志:
undefined // from: console.log(postData)
'undefined' // from: console.log(typeof postData)
undefined // from: console.log(item)
'undefined' // from: console.log(typeof item)
foo=bar&baz=qux // from: console.log(postData)
'string' // from: console.log(typeof postData)
foo=bar&baz=qux // from: console.log(item)
'string' // from: console.log(typeof item)