Nodejs 在试简易聊天室这个案例 建立服务器时遇到问题

Nodejs 在试简易聊天室这个案例 建立服务器时遇到问题

var app = require(‘express’).createServer(), io = require(‘socket.io’).listen(app);

app.listen(3000);

app.get(’/’, function (req, res) { res.sendfile(__dirname + ‘/index.html’); });

io.sockets.on(‘connection’, function (socket) { socket.emit(‘welcome’, { text: ‘OH HAI! U R CONNECTED!’ }); });

目录下面有index.html 报错内容是: TypeError: Arguments to path.join must be strings at f (path.js:204:15) at Object.filter (native) at exports.join (path.js:209:40) at exports.send (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\node_modules\connect\lib\middleware\static.js:129:20) at ServerResponse.res.sendfile (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\lib\response.js:186:3) at io.sockets.on.socket.emit.text (C:\Users\Administrator\nodejs\demo\socket.io_express\app.js:7:7) at callbacks (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\lib\router\index.js:272:11) at param (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\lib\router\index.js:246:11) at pass (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\lib\router\index.js:253:5) at Router._dispatch (C:\Users\Administrator\nodejs\demo\socket.io_express\node_modules\express\lib\router\index.js:280:5)

哪里出问题了额

6 回复

根据你提供的错误信息和代码片段,问题主要出现在 res.sendfile 方法的参数传递上。错误提示 TypeError: Arguments to path.join must be strings 表明路径连接操作中传递的参数类型不正确。

具体来说,问题出在 res.sendfile 的参数格式上。你需要确保路径字符串的格式正确,并且使用正确的库方法来发送文件。

以下是修正后的代码示例:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

server.listen(3000);

// 使用 express 的 sendFile 方法来发送文件
app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
    socket.emit('welcome', { text: 'OH HAI! U R CONNECTED!' });
});

关键修改点:

  1. 导入 Express 和 HTTP 模块:

    • 使用 require('express') 导入 Express 库。
    • 使用 require('http') 导入 HTTP 模块,因为 socket.io 需要一个 HTTP 服务器对象。
  2. 创建服务器:

    • 使用 require('http').createServer(app) 创建 HTTP 服务器,并将 Express 应用作为参数传递给它。
    • 使用 require('socket.io')(server) 来监听这个 HTTP 服务器。
  3. 发送文件:

    • 使用 res.sendFile(__dirname + '/index.html') 方法来发送 HTML 文件。注意这里使用的是 sendFile 而不是 sendfile,这是 Express 4.x 版本中的方法。

通过这些修改,你应该可以解决 TypeError: Arguments to path.join must be strings 错误,并且能够正常启动服务器和发送文件。


请问你的index.html在哪里呢? 如果在 public目录下 那么res.sendfile(__dirname + ‘/public/index.html’);

再顶一下。。

我也是遇到同样的问题,百度谷歌半天无果…求大神解决

八成是版本的问题,旧path.join可以传入非string参数,新path.join传入非string参数就会报这个错 http://nodejs.org/api/path.html#path_path_join_path1_path2 所以去看看socket.io有没有新版本

你遇到的问题是因为在 express 的版本更新中,express.createServer() 已经被弃用。你需要使用 express() 创建一个应用实例。此外,path.join 需要确保传递的参数都是字符串。

下面是修改后的代码:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

server.listen(3000);

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
    socket.emit('welcome', { text: 'OH HAI! U R CONNECTED!' });
});

主要修改点:

  1. 使用 express() 创建应用实例。
  2. 使用 require('http').createServer(app) 创建 HTTP 服务器,并将该服务器传给 socket.io
  3. 使用 res.sendFile 替代 res.sendfile

这样应该可以解决你的问题。

回到顶部