【问题标题】:socket.io.js not found in express在 express 中找不到 socket.io.js
【发布时间】:2018-07-31 12:58:39
【问题描述】:

我的socket.io文件夹结构如下:

  • node_modules/socket.io/

socket.io.js 我的文件夹结构如下:

/node_modules/socket.io-client/dist/socket.io.js

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

 io.on('connection', function(socket){
    socket.on('chat', function(msg){
        io.emit('chat',msg);
    });
 });

io.on('disconnect', function() {
    console.log('user is disconnected');
});

视图如下:

<script src="/node_modules/socket.io-client/dist/socket.io.js"></script>
  <script src="/js/jquery-2.1.4.min.js"></script>

<script>
$(function(){
    var socket= io();
    $('form').submit(function(e){
        e.preventDefault();
        socket.emit('chat', $('#input').val());
        $('#input').val('');
    return false;
    });

    socket.on('chat', function(msg){
        $('#sent').append(msg);
    });        
});     
</script>

错误是:

Failed to load resource: the server responded with a status of 404 (Not Found)

Uncaught ReferenceError: io is not defined

【问题讨论】:

    标签: node.js express socket.io chat


    【解决方案1】:

    在不创建服务器的情况下,您正在创建套接字实例,您可以将应用程序传递给您的 socket.js,或者您可以将套接字导出到其他模块并相应地使用....应该是这样的

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

    【讨论】:

      【解决方案2】:

      首先,node.js 服务器默认不提供任何文件。对于要由服务器提供的文件,必须有一个路由处理程序,该处理程序具有发送该特定文件的代码。所以,这就解释了为什么这不起作用:

       <script src="/node_modules/socket.io-client/dist/socket.io.js"></script>
      

      因为您的服务器中没有路径 "/node_modules/socket.io-client/dist/socket.io.js" 的路由处理程序。

      但是,socket.io 为您解决了这个问题。 socket.io 服务器自动安装路由:

      /socket.io/socket.io.js
      

      当它看到上述请求时,它将进入该 node_modules/socket.io/client 目录并发送 socket.io.js 文件。

      所以,把你的脚本标签改成这样:

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

      而且,socket.io 服务器会自动从 dist 目录发送 socket.io.js 文件。


      看起来您的服务器初始化也不正确,因为您没有将express 传递给您的http 服务器,而是传递了app。改变这个:

      var express = require('express');
      var http= require('http').Server(express);
      var io= require('socket.io') (http);
      var app = express();
      
      io.on('connection', function(socket){
          socket.on('chat', function(msg){
              io.emit('chat',msg);
          });
       });
      
      io.on('disconnect', function() {
          console.log('user is disconnected');
      });
      

      到这里:

      var express = require('express');
      var app = express();
      var server = require('http').createServer(app);
      var io = require('socket.io')(server);
      server.listen(80);
      
      io.on('connection', function(socket){
          socket.on('chat', function(msg){
              io.emit('chat',msg);
          });
       });
      
      io.on('disconnect', function() {
          console.log('user is disconnected');
      });
      

      或者,更简单的版本:

      var express = require('express');
      var app = express();
      var server = app.listen(80);
      var io = require('socket.io')(server);
      
      io.on('connection', function(socket){
          socket.on('chat', function(msg){
              io.emit('chat',msg);
          });
       });
      
      io.on('disconnect', function() {
          console.log('user is disconnected');
      });
      

      【讨论】:

        猜你喜欢
        • 2014-06-04
        • 2014-10-20
        • 1970-01-01
        • 2012-08-09
        • 2022-01-06
        • 1970-01-01
        • 2019-01-26
        • 2019-05-05
        • 2012-01-31
        相关资源
        最近更新 更多