1

我正在尝试在节点中发送 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/');
    }
    });
4

2 回答 2

1

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

res.end(JSON.stringify({files: fileInfos}));
于 2013-09-24T17:22:50.640 回答
1

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

response.end([数据], [编码])#

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

如果指定了data,则相当于调用response.write(data, encoding)后跟response.end()。

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

于 2013-08-05T16:49:37.777 回答