【发布时间】:2013-03-11 13:12:36
【问题描述】:
我刚刚在运行 Linux Peppermint 3 的上网本上安装了 Node JS (v0.10.0)。我有一个文件要运行,顶部有以下内容:
var app = require('express').createServer(),
io = require('socket.io').listen(app);
app.listen(8080);
// routing
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
问题是当我访问localhost:8080 时,我得到以下信息:
TypeError: Arguments to path.join must be strings
at path.js:360:15
at Array.filter (native)
at exports.join (path.js:358:36)
at exports.send (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/node_modules/connect/lib/middleware/static.js:129:20)
at ServerResponse.res.sendfile (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/response.js:186:3)
at usernames (/home/guy/Dropbox/Node/socket_io echo test/med.js:11:7)
at callbacks (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:272:11)
at param (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:246:11)
at pass (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:253:5)
at Router._dispatch (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:280:5)
完全相同的文件可以在我的 Windows XP 笔记本电脑上运行,但我还没有更新 Node(仍在运行 v0.8.15)。所以我不知道是我在 Linux 上安装 Node (我是新手)的问题还是版本之间的差异。显然我不想在 Windows 上更新 Node,如果它会导致同样的问题。
我已经检查过 Express 是否在它应该在的位置,这似乎没问题。我尝试通过 npm 重新安装它。我查看了错误(通过搜索上面的第一行),发现提到了 here 和 here 和 here,似乎都说它已经解决了。
还有什么想法(如果有的话)我可以尝试让我的简单页面服务器正常工作吗?
【问题讨论】:
-
由于您使用的是
require('express').createServer(),您确定您的 Express 是最新的吗? Express 3.x 使用require('express')()。另外,如果您从名称中不包含空格的目录(socket_io test echo)运行它,请尝试查看它是否有效。您的示例在 Node 0.10.1 和 Express 3 中运行良好。 -
npm view显示的是 NPM 注册表中包的版本,而不是你本地安装的版本;试试npm list express。 -
__dirname is a Node global。在您的路由处理程序中尝试
console.log(__dirname + '/index.html')以查看它是否实际上包含有效路径。 -
尝试在 SO 中搜索 socket.io.js 找不到,我记得之前看到过这个问题 :)
-
你可以回答你自己的问题,关于你是如何解决问题的。将来可能会帮助某人:)
标签: linux node.js express socket.io