当我尝试运行我的JS文件时,我收到此错误:
http.js:783
throw new TypeError('first argument must be a string or Buffer');
我正在关注本教程,似乎没有提到问题Tutorial Link
我的JS文件有:
var http = require('http'),
fs = require('fs'),
sanitize = require('validator').sanitize;
var app = http.createServer(function (request, response) {
fs.readFile("client.html", 'utf-8', function (error, data) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(data);
response.end();
});
}).listen(1337);
var io = require('socket.io').listen(app);
io.sockets.on('connection', function(socket) {
socket.on('message_to_server', function(data) {
var escaped_message = sanitize(data["message"]).escape();
io.sockets.emit("message_to_client",{ message: escaped_message });
});
});
我的node_modules文件夹中安装了Socket.io和validator。我对这种东西很陌生,看起来这个教程不是一个好的开始选择,我似乎无法让它工作。
答案 0 :(得分:3)
您没有进行任何错误检查,我敢打赌readFile
正在抛出错误。这意味着data
未定义,因此当您尝试response.write(data)
时,http模块会抛出错误。
始终检查回调函数中的错误参数,并对其进行适当处理。
fs.readFile("client.html", 'utf-8', function (error, data) {
if (error) {
response.writeHead(500, {'Content-Type': 'text/html'});
response.write(error.toString());
} else {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(data);
}
response.end();
});