response.write()不接受字符串。它表现得好像未定义

时间:2014-03-26 20:35:09

标签: javascript node.js

我已经从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?

我不知道我是否导致了问题,或者使用了弃用的方法或者是什么。请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:1)

问题似乎是within the createServer() callback,它试图route()每个requestresponse两次 - 一次没有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)