【问题标题】:Why I get 'Cannot GET /' on my express server?为什么我的快递服务器上出现“无法获取 /”?
【发布时间】:2023-04-11 02:19:02
【问题描述】:

我写了一个带有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

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    你的线路:

    <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(尽管还有另一个 flash 文件 .swf为不支持 Websockets 的浏览器提供服务)

    您可以通过ExpressJS APISocket.io wiki 了解更多信息。

    【讨论】:

    • 这行得通,谢谢。你能解释一下为什么我应该使用这条路径到socket.io 以及它是如何工作的吗?(它在哪里寻找这个)
    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多