在node.js中发送HTTP响应

时间:2013-08-05 16:36:16

标签: node.js http error-handling syntax-error

我正在尝试在节点中发送http响应以在浏览器中打印结果。简化的源代码如下。基本上,所有变量都在程序中的某个地方定义,所以这不应该是问题。当我尝试运行脚本时,我不断收到错误:

    http.js:783
        throw new TypeError('first argument must be a string or Buffer');

    TypeError: first argument must be a string or Buffer

熟悉node.js或javascript语法的人可以告诉我这是什么问题吗?

    upload = function(req, res) {
        var fileInfos = [obj, obj];    //defined as an array of objects
        var counter = 0;           
        counter -= 1;
        if (!counter) {                
            res.end({files: fileInfos});    //files is defined. 
        }
        };

    async.forEach(urls, downloadFile, function (err) {    //all params defined. 
        if(err){
            console.error("err");
            throw err;
        }
        else{
            http.createServer(function(req, res){
            upload(req1, res);                       //req1 defined as an array of objects.
        }).listen(3000, "127.0.0.1");
        console.log('Server running at http://127.0.0.1:3000/');
    }
    });

2 个答案:

答案 0 :(得分:1)

此错误通常是由尝试使用错误类型的参数调用response.write引起的。查看它建议的文档:

  

response.end([data],[encoding])#

     

此方法向服务器发出信号,表示已发送所有响应标头和正文;该服务器应该考虑此消息完成。必须在每个响应上调用方法response.end()。

     

如果指定了 data ,它等同于调用response.write(data,encoding),后跟response.end()。

现在response.write( chunk, encoding )期望块是一个字符串,所以当你调用res.end({files: fileInfos})时,它似乎无法将该对象的内容写成字符串。

答案 1 :(得分:1)

您可以使用JSON.stringify()将JavaScript对象转换为字符串,然后再将其发送到客户端。

res.end(JSON.stringify({files: fileInfos}));