[Node.js]在windows下不得不防的小錯誤

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 (E:\nodejs\demo\socket.io-express\node_modules\express\node_modules\connect\lib\middleware\static.js:129:20)
    at ServerResponse.res.sendfile (E:\nodejs\demo\socket.io-express\node_modules\express\lib\response.js:186:3)
    at io.sockets.on.socket.emit.text (E:\nodejs\demo\socket.io-express\app.js:8:6)
    at callbacks (E:\nodejs\demo\socket.io-express\node_modules\express\lib\router\index.js:272:11)
    at param (E:\nodejs\demo\socket.io-express\node_modules\express\lib\router\index.js:246:11)
    at pass (E:\nodejs\demo\socket.io-express\node_modules\express\lib\router\index.js:253:5)
    at Router._dispatch (E:\nodejs\demo\socket.io- express\node_modules\express\lib\router\index.js:280:5)

Node.js中的兩個模塊Socket.io 和Express做整合的時候出現了以下的錯誤:


var express = require('express');
var app = module.exports = 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!'});
});

錯誤原因:

主要的錯誤原因是上面代碼第8行,將代碼改爲以下形式即可工作。

var express = require('express');
var app = module.exports = express.createServer(),
    io = require('socket.io').listen(app);
app.listen(3000);

app.get('/', function(req, res){
	res.sendfile('/index.html', {root: __dirname});
});

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


在win 下 傳

__dirname + '/index.html' -> E:\nodejs\demo/index.html

貌似,那裏用 url 解析模塊.最後解析的結果不是windows 那種路徑樣子..

然後到創建流的時候路徑就不對了..

參考資料:https://github.com/visionmedia/send


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章