繁体   English   中英

node.js TypeError:路径必须是字符串。 收到空值

[英]node.js TypeError: Path must be a string. Received null

我最近正在研究使用socket.io,node.js和express.js的JavaScript。 这是服务器代码。

 var port = +process.argv[2] || 8080, sanitizer = require('validator').sanitize, express = require('express'), server = express.createServer(), io = require('socket.io').listen(server), chat = io.of('/chat'), canvas = io.of('/canvas') ; function sanitize(string) { return sanitizer(string).entityDecode() } server.listen(port); server.get(/(^\\/.*$)/, function(request, response) { var fileName = request.params[0]; if (fileName == '/') fileName = '/index.html'; response.sendfile(__dirname + '/client' + fileName); }); io.sockets.on('connection', function(socket) { socket.on('setName', function (name) { name = sanitize(name); socket.set('name', name); socket.broadcast.emit('receive', { sender:'Server', message:name + ' has joined.' }) }); socket.on('send', function (message) { socket.get('name', function(error, name) { if (name) socket.broadcast.emit('receive', { sender:name, message:sanitize(message) }) }) }); socket.on('draw', function (command) { io.sockets.emit('draw', command) }); socket.on('updateCursor', function(position) { socket.get('name', function(error, name) { if (name) socket.broadcast.emit('updateCursor', { name:name, position:position }); }); }); socket.on('disconnect', function() { socket.get('name', function(error, name) { if (name) { socket.broadcast.emit('receive', { sender:'Server', message:name + ' has left.' }); socket.broadcast.emit('removeCursor', name); } }) }); }); 

我能够成功设置服务器,但是在浏览器上使用本地主机时,出现以下错误:

TypeError:路径必须是字符串。 在export.send(C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ node_modules \\)在win32.join(path.js:221:5)的assertPath(path.js:8:11)处收到null在ServerResponse.res.sendfile(C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ node_modules \\ express \\ lib \\ response)的express \\ node_modules \\ connect \\ lib \\ Middleware \\ static.js:127:20)。 js:186:3)位于C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ server.js:23:14位于回调(C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ param上的\\ node_modules \\ express \\ lib \\ router \\ index.js:272:11)(C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ node_modules \\ express \\ lib \\ router \\ index.js:246 :11)在Router._dispatch(C:\\ Users \\ Akshay \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ node_modules \\ express \\ lib \\ router \\ index.js:253:5) \\ Desktop \\ whiteboard-master \\ whiteboard-master \\ node_modules \\ express \\ lib \\ router \\ index.js:280:5)在Object.Router.middleware [作为句柄](C:\\ Users \\ Akshay \\ Desktop \\ whitebo ard-master \\ whiteboard-master \\ node_modules \\ express \\ lib \\ router \\ index.js:45:10)

我使用不稳定的节点v0.5.8 Windows二进制版本开发了此程序。 但我当前正在运行4.4.5版本。

请帮助我,我哪里出问题了?

从粘贴的示例代码中很难分辨出来,因为堆栈跟踪引用index.js中的第45行作为问题的根源( C:\\Users\\Akshay\\Desktop\\whiteboard-master\\whiteboard-master\\node_modules\\express\\lib\\router\\index.js:45:10 ),但是当我在IDE中查看您的示例/粘贴代码时,它什么也没做。 脚本的前面是对sendfile的唯一调用(在堆栈跟踪中进一步引用)。

假设这是您遇到的问题的位置,则应使用console.log()或以其他方式调试要发送给访问者的路径/文件名的值。 请注意,在Windows中,路径分隔符为\\ not / 您应该使用path.join()来形成所服务文件的最终路径。 ExpressJS示例说明了这一点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM