TypeError:First Argument必须是字符串或Buffer

时间:2017-08-30 08:25:26

标签: node.js

我最初使用的是节点v4.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");

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在不知道错误的情况下,这是非常困难的。您使用的库非常基础,您所使用的功能在您引用的版本之间不应该(在界面方面)不同。

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

您可以尝试:

response.write(String(contents));

并且您的页面应该显示一个简单的“未定义”字符串。如果是这种情况,那么下一步就是要理解为什么“index.html”无法打开。

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

node inspect script.js

您应该将debugger;插入您希望逐行检查器停止的位置。查看文档here