首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js TypeError:路径必须是字符串。接收空

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

Stack Overflow用户
提问于 2016-06-13 12:17:24
回答 1查看 2K关注 0票数 0

我最近正在编写一个使用socket.io、node.js和express.js的javascript。这是服务器代码。

代码语言: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:路径必须是字符串。接收null at (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\node_modules\connect\lib\middleware\static.js:127:20) at assertPath (path.js:8:11) at win32.连接(path.js:221:5) at exports.send path.js:221:5 at ServerResponse.res.sendfile186:3)在C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\server.js:23:14 at callback (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:272:11) at param (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:246:11) at pass (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:253:5) at Router._dispatch (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:280:5) at Object.Router.middleware as handle

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

请帮帮我,我哪里出错了?

EN

回答 1

Stack Overflow用户

发布于 2016-06-13 13:48:28

从您粘贴的示例代码中很难看出这一点,因为您的堆栈跟踪将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中,路径分隔符是\而不是/。您应该使用path.join()来形成所服务文件的最终路径。ExpressJS示例说明了这一点:

代码语言:javascript
复制
app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, 'index.html'));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37789655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档