2012-04-17 68 views
41

由於某種原因,我的節點服務器無法提供路由/socket.io/socket.io.js,我總是得到一個404錯誤。
我試着編譯不同的節點版本(當前是0.6.13,它也在服務器上運行,它實際上工作在)。
從app.js我得到info: socket.io started,並嘗試調用socket.io.js時沒有錯誤。socket.io.js找不到

我嘗試從本地主機和端口8000,我用快遞框架

這是app.js代碼:

var express = require('express') 
    , app = require('express').createServer() 
    , io = require('socket.io').listen(app, { log: true }); 

app.listen(8000); 

app.configure(function() { 
    app.use(express.static(__dirname + '/public')); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

io.sockets.on('connection', function (socket) { 
    // all other stuff here 
+1

向我們展示你的代碼(socket.io初始化和框架的初始化,如果你正在使用一個)。 – freakish 2012-04-17 12:20:54

+0

好的,我編輯了我的問題。 – 2012-04-17 12:25:09

回答

90

請檢查您的快遞版本。 Express最近更新爲3.0alpha哪些API已更改。

var express = require('express') 
    , http = require('http'); 

var app = express(); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

... 

server.listen(8000); 

同樣的問題與連接:https://github.com/senchalabs/connect/issues/500#issuecomment-4620773

+0

好吧,這聽起來非常接近,我用你的代碼取代了它,現在當我嘗試啓動服務器時出現這個錯誤:''無法調用'未定義'方法'。這對應於下面的代碼段:'io.sockets.on('connection',function(socket){'。這只是簡單的奇怪,我覺得很失落 – 2012-04-17 13:38:09

+0

btw我忘了補充說我實際上已經安裝了express 3.0alpha – 2012-04-17 13:45:56

+0

對不起,我寫了socket.io的錯誤代碼,我更新了它,請再次更改您的代碼。 – nguyenkha 2012-04-17 13:48:19

0

也許這可以幫助你,在我的Ubuntu 11.10我的天堂沒有正確設置NODE_PATH變量, 如果您在linux/mac上,請嘗試將下面的行添加到您的.bashrc/.zshrc文件中。

export NODE_PATH=/usr/lib/node_modules:$NODE_PATH 
+1

我將'node_modules'添加到了NODE_PATH中,但它仍然不起作用。太糟糕了,它真的提出了我的希望。但奇怪的是,當通過npm安裝某些東西時,它會說:'檢查節點路徑:找不到'。但是當回顯$ NODE_PATH時,我得到'/ usr/local/lib/node:/ usr/local/lib/node_modules'。我現在非常困惑。 – 2012-04-17 13:10:02

1

安裝節點0.8.1後,我有同樣的問題。如果3.0的東西喜歡這個你可以改變你的代碼。 我剛剛刪除了我的項目文件夾中的node_modules映射並重新安裝了express/socket.io。 之後,它再次與你的問題中的代碼一起工作。

3

與快遞3 web框架使用:(from socket.io

>快遞3,您需要實例化一個http.Server附加socket.io先:

意思 - (1)你必須創建一個服務器實例:

var app = express(); 
var http = require('http').createServer(app); 

(2)與socket.io情侶吧:

var io = require('socket.io'); 
io.listen(http); 

然後才 - (3)讓服務器監聽:

http.listen(8080); 

一定要保持這個命令!

0

安裝套接字。IO您的倉庫裏:

npm install socket.io --save 

後,配置服務器:

var express = require('express') 
    var app  = express(); 
    var server = require('http').createServer(app); 
    var io  = require('socket.io').listen(server); 

    server.listen(app.get('80')); // not 'app.listen' 

並存檔HTML/EJS內或其他需要,可以添加:

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

檢查如果適用於Console(Chrome/Mozilla等)。

在我的例子我使用Chrome(Ctrl + Shift + I):

enter image description here