簡體   English   中英

Express + socket.io:socket.io客戶端腳本為404

[英]Express + socket.io: socket.io client script is 404

這讓我發瘋……當我有Express + Socket.io的工作版本時,似乎無法通過新項目文件夾中的即用NPM安裝來重現它。 誰能指出我所缺少的...? 這是我的過程:

我在項目目錄( pwd )中創建一個node_modules文件夾,然后執行以下操作:

npm install express
npm install socket.io

運行這兩個命令將程序包按預期放入我項目的node_modules文件夾中。 現在,我使用以下設置服務器:

var express = require('express'),
    server = express.createServer().use( express.static(__dirname+'./public') ).listen( 8080 ),
    io = require('socket.io').listen(server);

我的public文件夾中包含我的應用程序靜態資產。 我的公共索引HTML頁面包含一個腳本標記,用於:

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

最后,我運行服務器腳本並在Web瀏覽器中轉到該應用程序。 我的靜態公共文件都可以正常使用,但是/socket.io/socket.io.js卻得到404。 現在,我可以從另一個舊項目中交換express包,並完成整個系統工作。 該包實例以某種方式進行了不同的配置,但是我不知道如何重現該實例。 該快遞網站提到一些有關安裝的依賴,雖然運行npm install -d似乎並沒有幫助(有沒有特定的pwd ,我需要在運行時npm install -d ?)。 我認為在使用NPM安裝新Express實例后,一定會缺少一些重要的配置信息。

感謝您提供的所有見解!

好的,所以我的示例實際上是我的代碼的縮寫,並且該示例代碼確實有效。 我真正的問題代碼有點混亂,像這樣:

var server = express.createServer();

server
    .use( server.router )
    .use( express.static(__dirname+'/../public') )
    .get('/api', function(req, res) {
        res.write('API');
    });

server.listen(8080);

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

我通過執行以下操作修復了上述代碼:

server = server.listen(8080);

顯然, listen命令用一些附加功能包裝服務器對象。 我最初發布的速記示例確實有效,因為listen鏈接到服務器變量的最終返回中。 有趣的細微差別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM