2016-06-13 24 views
0

Ich habe vor kurzem an einem Javascript gearbeitet, das socket.io, node.js und express.js verwendet. Hier ist der Servercode.node.js TypeError: Der Pfad muss eine Zeichenfolge sein. Empfangene Null

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); 
 
      } 
 
     }) 
 
    }); 
 
});

Ich kann den Server erfolgreich einzurichten, aber wenn ich die localhost im Browser verwenden, erhalte ich folgende Fehlermeldung:

TypeError: Path must be a string. Received null at assertPath (path.js:8:11) at win32.join (path.js:221:5) at exports.send (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\node_modules\connect\lib\middleware\static.js:127:20) at ServerResponse.res.sendfile (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\response.js:186:3) at C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\server.js:23:14 at callbacks (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] (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:45:10)

ich diese entwickelt hatte Verwenden der instabilen v0.5.8 Windows-Binärversion des Knotens. aber ich führe gerade die Version 4.4.5.

Bitte helfen Sie mir, wo bin ich falsch gelaufen?

Antwort

0

Es ist ein wenig schwierig, aus dem Beispielcode zu erkennen, den Sie eingefügt haben, da Ihr Stack-Trace die Zeile 45 in Ihrer index.js als Quelle des Problems recherchiert (C:\Users\Akshay\Desktop\whiteboard-master\whiteboard-master\node_modules\express\lib\router\index.js:45:10), aber wenn ich mir Ihren Beispielcode anschaue eine IDE, es macht dort nichts. Der einzige Aufruf an sendfile (weiter oben in Ihrer Stack-Ablaufverfolgung referenziert) ist früher im Skript.

Angenommen, dies ist der Ort Ihres Problems, sollten Sie console.log() oder Debuggen Sie den Wert des Pfads/Dateiname, die Sie an den Besucher senden möchten. Beachten Sie, dass in Windows Pfadbegrenzer \ nicht / sind. Sie sollten path.join() verwenden, um den endgültigen Pfad zur Datei zu erstellen. Die ExpressJS-Beispiele veranschaulichen dies:

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

Vielen Dank. Ich werde das versuchen. Ich habe versucht, die index.html-Datei getrennt laufen zu lassen, es lief ohne Probleme, aber ich werde das nochmal überprüfen –

Verwandte Themen