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