2013-06-04 42 views
4

我試圖按照指示在這裏Node.js的快遞3個不服務socket.io.js

http://socket.io/#how-to-use

但是,我似乎太愚蠢明白,爲什麼我不能引用socket.io.jss在客戶端。我在這裏讀類似的職位,但他們似乎並不正確:NodeJS Express not serving '/socket.io/socket.io.js'

下面是完整的應用程序清單:

var application_root = __dirname, 
    express = require('express'), 
    //Web framework 
    path = require('path'), 
    //Utilities for dealing with file paths 
    pg = require('pg'); //Postgres integration 

//Create server 
var app = express(); 


// Configure server 
app.configure(function() { 
    //parses request body and populates request.body 
    app.use(express.bodyParser()); 

    //checks request.body for HTTP method overrides 
    app.use(express.methodOverride()); 

    //perform route lookup based on url and HTTP method 
    app.use(app.router); 

    //Where to serve static content 
    app.use(express.static(path.join(application_root, 'public'))); 

    //Show all errors in development 
    app.use(express.errorHandler({ 
     dumpExceptions: true, 
     showStack: true 
    })); 
}); 


//Start server 
var port = 4711; 
app.listen(port, function() { 
    console.log('Express server listening on port %d in %s mode', port, app.settings.env); 
}); 

//Start socket.io 
var server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

現在,如果我嘗試引用客戶端的JS,我得到一個404。

<script src="/socket.io/socket.io.js"></script> 

任何人都知道爲什麼Express 3不允許socket.io爲其客戶端lib服務?

+2

只是一個想法,但src應該以斜槓開頭。 'src =「/ socket.io/socket.io.js」相對路徑可能導致請求失敗,具體取決於當前頁面的url。 –

+0

我認爲你是對的,但仍然會產生一個404 – metalaureate

+1

我只是按原樣運行你的腳本,只有兩條附加行是'app.use(express.static(__ dirname));'爲示例中的html文件提供服務,和'server.listen(8080);'。它服務於socket.io.js就好了。無論你遇到什麼問題,都可能在你的代碼中的其他地方。我建議先從一個簡單的例子開始,然後發佈一個更完整的代碼片段。 –

回答

4

我發現這裏

Socket.io is not served in /socket.io/socket.io.js

閱讀答案通過http://expressjs.com/api.html#app.listen,注意 app.listen是如何定義的。

總之:將app.listen替換爲server.listen。

+0

是的,這肯定會導致這個問題......我添加了'server.listen()'這個事實可能是一個線索,但我很高興你明白了。你現在應該接受你自己的答案,所以其他人知道這個問題已經得到了充分的回答。 –

+1

感謝您的幫助。 Stack Exchange不會讓我接受另外9個小時的答案 - 那麼我會做。再次感謝您的幫助。 – metalaureate