Javascript Node.js相当基本,但却有一个隐秘的错误

Javascript Node.js相当基本,但却有一个隐秘的错误,javascript,node.js,Javascript,Node.js,各位,我对Node.js有点问题。我最近开始在学校学习。但当我复制这段代码时,出现了以下异常: TypeError: First argument must be a string or Buffer 我有一个index.html文件,看起来很基本。它不应该是一个混乱的代码 var http = require('http'); var fs = require('fs'); http.createServer(function (req, res) { fs.readFile('inde

各位,我对Node.js有点问题。我最近开始在学校学习。但当我复制这段代码时,出现了以下异常:

TypeError: First argument must be a string or Buffer
我有一个index.html文件,看起来很基本。它不应该是一个混乱的代码

var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
  fs.readFile('index.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
  });
}).listen(8080);

发生这种情况的主要原因是res.write()或res.end(),其中任何一个都接受字符串作为其第一个参数,尝试使用res.send(data)都可以正常工作。祝您今天过得愉快。快乐学习NodeJS

不要忽视错误(这会让一切变得更糟)

这要么传递数据,err为
null
,要么发生错误时,数据为
null
,err为
错误。当后一种情况发生时,你忽略它,然后去做

res.write(data);
当数据为
null
并且您不能将
null
发送到客户端时,它将不起作用(只有错误中所述的缓冲区或字符串)。 那怎么办呢?我们将添加一个错误处理程序:

fs.readFile('index.html', function(err, data) {
 if(err)
   return res.write(err.message);

 res.writeHead(200, {'Content-Type': 'text/html'});
 res.write(data);
 res.end();
});
所以现在你可能会得到真正的错误

File not found

因此,您可以检查是否有index.html文件。

可能您不应该忽略
err
。。。我猜这是因为您没有index.html文件,因此数据将是
null
,并且将其传递给
res.write(null)
将抛出错误耶。。。我知道。。。我只是在检查这是否有效…:D@Jonasw我在edit dude my bad will edit中做了这样一件事,它说“res.send不是一个函数”:/:“如果没有指定编码,则返回原始缓冲区。”由于没有将编码传递到readFile,它将重新调用缓冲区。此外,还接受字符串和缓冲区。错误说明参数必须是字符串,因此只需传递
res.write(data.toString())否。。。它冻结了。:/正如我之前所说,我把文件放在同一个目录中。@phoenix先生,什么冻结了?!看起来页面正在加载,似乎没有停止好的。。。现在,在加载3分钟后,出现例外文件错误。谢谢我不知道它需要另一个基本文件夹,而不是当前的:D现在一切正常。
File not found