繁体   English   中英

在express中找不到socket.io.js

[英]socket.io.js not found in express

我的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

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

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

首先,默认情况下,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');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM