簡體   English   中英

為什么我的快遞服務器上出現'無法獲取/'?

[英]Why I get 'Cannot GET /' on my express server?

我寫了一個帶有node.js的服務器的簡約示例,我希望通過該示例獲得客戶端連接的控制台通知。 我正在使用以下版本的模塊

  • express@3.0.6
  • socket.io@0.9.13
  • node@0.8.7

所以我寫了這個:

app.js

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

var app = express();

var server = http.createServer(app);

var io = socket.listen(server);
//var io = socket.listen(app);

io.sockets.on('connection',function(client){
        console.log("Client connected...");

        client.emit('messages', {hello: 'world'});
});

app.listen(8080);

index.html

<script src="node_modules/socket.io/lib/socket.io.js"></script>
<script>
    var server = io.connect("http://localhost:8080");

    server.on('messages', function(data){
        alert(data.hello);
    });

</script>

我的目錄結構如下:

|-- app.js
|-- index.html
`-- node_modules
    |-- express
    |   |-- bin
    |   |-- client.js
    |   |-- History.md
    |   |-- index.js
    |   |-- lib
    |   |-- LICENSE
    |   |-- Makefile
    |   |-- node_modules
    |   |-- package.json
    |   |-- Readme.md
    |   `-- test.js
    `-- socket.io
        |-- benchmarks
        |-- History.md
        |-- index.js
        |-- lib
        |-- LICENSE
        |-- Makefile
        |-- node_modules
        |-- package.json
        `-- Readme.md

你的路線:

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

應該換成

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

通過這樣做,您直接通過socket.io的內部靜態服務器而不是ExpressJS本身為客戶端提供靜態socket.io.js模塊!

編輯1:

哦,我忘了提到如何提供index.html文件,所以基本上你需要設置

var app = express();

app.use(express.static(__dirname + '/public'));

然后將index.html文件放在/public目錄中

編輯2 :(解釋)

ExpressJS通過內部靜態文件處理程序提供靜態文件。 app.use(express.static(__dirname + '/public')); 實際上將傳遞給node.js的請求重新路由到您的公用文件夾。

另一方面,Socket.io(作為一個單獨的庫)有自己的方法來提供它的靜態文件,只有包含URL的GET請求才會觸發它: /socket.io/socket.io.js (盡管還有另一個閃存)為不支持Websockets的瀏覽器提供的.swf文件)

您可以從ExpressJS APISocket.io wiki中了解更多信息。

暫無
暫無

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

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