TypeError:第一个参数必须是字符串或缓冲区



我最初使用的是nodev4.4.5,运行nodemon似乎可以工作。我一安装新版本,一切都坏了。我不太确定为什么会出现这个错误,因为我只是想让一个简单的节点运行。

这是守则。

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (request, response){
console.log('client request URL: ', request.url);
if(request.url === '/') {
fs.readFile('index.html', 'utf8', function (errors, contents){
response.writeHead(200, {'Content-Type': 'text/html'}); 
response.write(contents); 
response.end();
});
}
else {
response.writeHead(404);
response.end('File not found!!!');
}
});
server.listen(8000);
console.log("Running in localhost at port 8000");

我在节点版本V8.2.1上运行了您的代码。页面呈现时没有任何错误。安装Node.js:V6.11.2 的最新稳定版本

在不知道错误线的情况下,这是非常困难的。您使用的库是非常基本的,您使用的功能在您引用的版本之间不应存在差异(在接口方面(。

我建议你检查一下读取操作。fs.readFile的回调有一个尚未检查的errors字段。如果发生错误,contents可能保持未定义状态,因此response.write方法会引发错误,该方法需要缓冲区或字符串作为参数。

你可以试试:

response.write(String(contents));

您的页面应该显示一个简单的"未定义"字符串。如果是这样的话,那么下一步就是理解为什么不能打开"index.html"。

您可以使用节点调试器逐行运行代码:

node inspect script.js

您应该在希望逐行检查器停止的位置插入debugger;。请查看此处的文档。

最新更新