TypeError:第一个参数必须是字符串或缓冲区
我最初使用的是节点v4.4.5,并且运行nodemon似乎工作正常。一旦我安装了更新的版本,一切都破裂了。我不太清楚为什么我得到这个错误,因为我只是试图让一个简单的节点运行。TypeError:第一个参数必须是字符串或缓冲区
继承人的守则。
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");
我在Node版本:V8.2.1上运行了你的代码。 页面呈现没有任何错误。 安装Node.js的最新稳定版本:V6.11.2
由于读取文件和写入响应是非常基本的操作,因此不太可能成为Node.js环境问题。 – shaochuancs
它会在终端中运行,但只要在本地主机上打开它,就会发生错误。 – Gkata
将您在根级目录 如index.html的: - ' 服务器 | -app.js | -index.html ' –
不知道错误的路线是非常困难的。你使用的库是非常基本的,你所使用的功能在所引用的版本中不应该不同(在接口方面)。
我建议你检查读取操作。 fs.readFile
的回调具有尚未检查的errors
字段。如果发生错误,contents
可能保持未定义状态,因此错误由response.write
方法引发,该方法需要缓冲区或字符串作为参数。
你可以试试:
response.write(String(contents));
和你的网页应该显示一个简单的 “不确定” 的字符串。如果是这种情况,那么下一步就是了解为什么“index.html”无法打开。
您可以通过使用在线调试器的节点运行您的代码行:
node inspect script.js
您应该插入您希望通过线检查线停止debugger;
。检查文档here。
您能否定义在哪条线上出现错误?这个问题的一个原因可能是'response.write'这一行,因为'content'是未定义的。也许'fs.readFile'回调已收到一个错误(错误),你没有检查这些错误。 –
同意@MatteoRagni,导致错误的行号需要发布。另外,这可能是一个读取文件失败的问题。 – shaochuancs
它没有指定。它会在终端中运行,但是一旦我转到网络上的本地主机,它会得到该错误。 – Gkata