在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字符编码。