NodeJS抛出新的TypeError

时间:2013-12-10 18:58:58

标签: javascript node.js

当我尝试运行我的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。我对这种东西很陌生,看起来这个教程不是一个好的开始选择,我似乎无法让它工作。

1 个答案:

答案 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();
});