[英]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.