我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?

Posted

技术标签:

【中文标题】我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?【英文标题】:Can we use socket.io with ejs(embedded javascript) instead of html page in Node JS application? 【发布时间】:2017-06-28 14:31:39 【问题描述】:

在浏览器的客户端作为 ejs 页面:

<script src="https://cdn.socket.io/socket.io-1.2.0.js">
</script>
<script>
var socket = io()
socket.on('message', function (msg) 
    console.log(msg)
)
</script>

Node Js 中的服务器端:

var http = require('http').Server(app);
var io = require('socket.io')(http)
io.on('connection', function(socket)
    console.log('a user connected')
    socket.on('disconnect', function()
        console.log('user disconnected')
    )
io.emit('message', json);
)

我没有在 Node Js 控制台中获得“用户已连接”的登录信息。因为 var socket = io()不工作 或者我不知道是什么问题。我可以在 .ejs 页面中使用 socket.io 吗?我需要 ejs,我的应用程序中还需要 socket.io。任何帮助,将不胜感激。

【问题讨论】:

你应该把它连接到你的服务器和端口号。 var socket = io('localhost:port'),参考sachinsharma.com/2012/07/… 【参考方案1】:

这是对我来说很好的解决方案。

服务器端

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


app.set('view engine', 'ejs');
app.get('/', function(req, res) 
    res.render('index');
);

io.on('connection', function(socket) 
    console.log('a user connected');
    socket.on('chat message', function(msg)
        console.log('message: ' + msg);
      );
);

server.listen(process.env.PORT || 3000, function()
    console.log('app running');
);

这里是 index.ejs 代码

客户端

        <form action="">
                <input id="m" autocomplete="off" /><button>Send</button>
        </form>
        <script src="/socket.io/socket.io.js"></script>
        <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
        <script>
           $(function () 
                var socket = io();
                $('form').submit(function()
                socket.emit('chat message', $('#m').val());
                $('#m').val('');
                return false;
                );
            );
        </script>

【讨论】:

试着多解释一下你在做什么。

以上是关于我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.JS 中解析 Microsoft Office 文件

带有 Node.JS 的 MongoDB:$where 子句性能

使用带有通知程序的 pkg 构建 node.js 可执行文件

带有 Fabric.js 的 Node 中的 WebGL

带有 HTTP-AUTH 的 node.js Express

使用带有弹性 beanstalk、nginx 和 node.js 的 websocket 出现问题