我尝试使用套接字将消息从Node JS传递到Front端。但是,消息不会被传输。
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中看不到任何控制台日志。
<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
根据以下答案,我将代码更新为:
io.on('connection', function(socket) {
socket.emit('order', "Order Updated");
});
更新2
$(function () {
var socket = io.connect('http://127.0.0.1:5000', {transports ['polling']});
socket.on('order', function(msg) {
console.log(msg);
});
});
答案 0 :(得分:2)
也许在你的服务器端,你必须像这样发射到连接的套接字?
io.on('connection', function(socket){
socket.emit('order', "Order Updated");
console.log("Order Updated");
});
修改强>
在我的客户端,我正在使用host:port这样连接,并且它正常工作
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:
<script src="/socket.io/socket.io.js"></script> <!-- directly get from Node.js server -->
希望它有所帮助。
答案 1 :(得分:0)
您应该只向连接的套接字发射:
io.on('connection', function(socket) {
socket.emit('order', 'Order Updated');
});
否则您将向所有已连接的客户端发送,这可能不是您想要的。
编辑: 您必须在socket.io instatiation代码中指定要连接的端口:
var socket = io('http://localhost:5000');
它还建议将URL和端口存储在变量中,以便在部署到生产环境时可以轻松配置它们。