首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将套接字消息传递给ejs

无法将套接字消息传递给ejs
EN

Stack Overflow用户
提问于 2017-12-22 13:47:51
回答 2查看 301关注 0票数 0

我试图使用套接字将消息从Node传递到前端。但是,信息不会被传送。

代码语言:javascript
运行
复制
var express  = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
const path = require('path');
const PORT = process.env.PORT || 5000;

io.on('connection', function(socket){
   io.emit('order', "Order Updated");
   console.log("Order Updated");
}); 

app.use(express.static(path.join(__dirname, 'public')))
  .set('views', path.join(__dirname, 'views'))
  .set('view engine', 'ejs')
  .get('/', (req, res) => res.render('pages/index'));

http.listen(PORT, function(){
  console.log('listening on *:' + PORT);
});

控制台日志被打印为Order Updated。在index.ejs文件中,我有以下代码,在UI中没有看到任何控制台日志。

代码语言:javascript
运行
复制
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  $(function () {
    var socket = io();
    socket.on('order', function(msg){
      console.log(msg);
      window.scrollTo(0, document.body.scrollHeight);
    });
  });
</script>

更新1

基于以下答案,我将代码更新为:

代码语言:javascript
运行
复制
io.on('connection', function(socket) {
    socket.emit('order', "Order Updated");
}); 

更新2

代码语言:javascript
运行
复制
$(function () {
var socket = io.connect('http://127.0.0.1:5000', {transports ['polling']});
   socket.on('order', function(msg) {
      console.log(msg);
   });
});

服务器端控制台日志的映像:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-22 14:01:06

也许在您的服务器端,您必须像这样发出连接的套接字?

代码语言:javascript
运行
复制
io.on('connection', function(socket){
   socket.emit('order', "Order Updated");
   console.log("Order Updated");
}); 

编辑

在我的客户端,我与主机连接:像这样的端口,它正常工作

代码语言:javascript
运行
复制
var socket = io.connect('http://127.0.0.1:5000', {transports: ['polling']});
socket.on('order', function(msg) {
   console.log(msg);
}

编辑2

在我的index.html (客户端)上,我也像这样调用socket.io:

代码语言:javascript
运行
复制
<script src="/socket.io/socket.io.js"></script> <!-- directly get from Node.js server -->

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2017-12-22 14:01:47

您应该只发送到已连接的套接字:

代码语言:javascript
运行
复制
io.on('connection', function(socket) {
  socket.emit('order', 'Order Updated');
});

否则,您将发送到所有连接的客户端,这可能不是您想要的。

编辑:您必须在socket.io实例代码中指定连接的端口:

代码语言:javascript
运行
复制
var socket = io('http://localhost:5000');

还可以将URL和端口存储在变量中,以便在部署到生产环境时可以轻松地配置它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47942600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档