【问题标题】:Node use socket.io with ejs and router节点使用带有 ejs 和路由器的 socket.io
【发布时间】:2020-02-25 14:12:28
【问题描述】:

我试图让socket.io运行,但我总是得到一个客户端错误,所以我认为代码里面有一个逻辑炸弹。

app.js

const express = require('express');
const app = express();
const router = express.Router();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.set('socketio', io);
const expressLayouts = require('express-ejs-layouts');

module.exports = router;

app.use(express.static(__dirname));
app.use(express.urlencoded({ extended: true }));

app.use(expressLayouts);
app.set('view engine', 'ejs');

app.use(function(req, res, next) {
    next();
});

io.on('connection', function(socket){
    console.log('a user connected');
});

app.use('/', require('./routes/test.js'));

const PORT = process.env.PORT || 8081;

app.listen(PORT, console.log(`Server started on port ${PORT}`));

在路由文件中我打开页面

test.js

const express = require('express');
const router = express.Router();


// Dashboard
router.get('/start', (req, res, next) => {

    res.render('index2', {
        caseArray: 'eins'
    });


});


module.exports = router;

最后在我添加的模板中:

    <script
        src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"
     ></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>var socket = io();</script>

但我总是在浏览器控制台中收到一条错误消息:

GET http://localhost:8081/socket.io/socket.io.js net::ERR_ABORTED 404 (Not Found)
(index):24 Uncaught ReferenceError: io is not defined
    at (index):24

正如我从所有教程中了解到的那样,该节点会将请求中的 socket.io 发送到 html 页面,并与 html 页面一起连接服务器。但是没有连接消息,因为文件不存在。我的问题在哪里?在客户端还是服务器?

【问题讨论】:

    标签: node.js socket.io ejs


    【解决方案1】:

    适用于所有有类似问题的人。我通过使用解决了它

    server.listen(PORT, console.log(`Server started on port ${PORT}`));
    

    而不是使用

    app.listen(PORT, console.log(`Server started on port ${PORT}`));
    

    【讨论】:

      【解决方案2】:

      似乎 node 正在尝试在您的服务器上的路由 /socket/socket.io.js 上找到 socket.io 的 js 文件,我假设您尚未定义

      我建议你使用 Socket io 的 cdn 链接并将它放在你的 html header 标签之间

      <script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js'></script>
      

      【讨论】:

        猜你喜欢
        • 2013-11-18
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多