在node.js中抛出新的TypeError('第一个参数必须是string或缓冲区')

我是js节点的新手,一周前开始学习。

当创build一个小型服务器时,我得到了下面的错误:

_http_outgoing.js:543抛出新的TypeError('第一个参数必须是一个string或缓冲区'); ^

TypeError:第一个参数必须是一个string或缓冲区在ServerResponse.OutgoingMessage.end(_http_outgoing.js:543:11)在call_backfunction(/Users/Aman/Documents/learn/node/app3/server.js:36:8)at iterator(/Users/Aman/Documents/learn/node/app3/server.js:57:6)at /Users/Aman/Documents/learn/node/app3/server.js:68:6 at FSReqWrap.oncomplete(fs的.js:82:15)

function loadAlbums(req, res){ var call_backfunction = function(err, album_list){ if(err){ res.writeHead(503, {"Content-Type": "text/plain"}); res.end("There are no albums in folder. " + err + "\n"); } else{ res.writeHead(200, {"Content-Type": "text/json"}); res.end(album_list); } } albumLoader(req, res, call_backfunction); } function albumLoader(req, res, callback){ var path = req.core_url.pathname.substr(1, 6); fs.readdir(path, function(err, files){ if(err){ callback(err); return; } else{ var dirs = []; (function iterator(i) { console.log(dirs); if(i>=files.length){ callback(null, dirs); return; } fs.stat(path + "/" + files[i], function(err, stat){ if(err){ callback(err); return; } else if(stat.isDirectory){ dirs.push(files[i]); } iterator(i+1); }); })(0); } }); } 

它的工作正常,当我改变callback参数

 callback(null, dirs.toString()); 

我真的不明白这里的逻辑,为什么它需要string或缓冲区。

res.end(data)(指定data参数)是res.write()和res.end()的等价物。 res.write()只接受一个string或Buffer作为参数。 在这里阅读更多。

当你运行这个代码时,album_list是一个数组。

 res.end(album_list); 

将dirs数组转换后,将album_list参数转换为Buffer或string后,您将不会收到此错误。

它必须是一个string或缓冲区,因为响应正文的默认编码是utf8字符编码。