Node.js 命中快速端点后在socket.io中发出
我不熟悉插座 我正在与使用socket.io的客户端一起运行express Web服务器 基本上,每当有人点击我的一个post请求时,我都会向我的客户机发送一个结果,表明post请求被点击。我想象它看起来像这样 节点服务器Node.js 命中快速端点后在socket.io中发出,node.js,express,socket.io,Node.js,Express,Socket.io,我不熟悉插座 我正在与使用socket.io的客户端一起运行express Web服务器 基本上,每当有人点击我的一个post请求时,我都会向我的客户机发送一个结果,表明post请求被点击。我想象它看起来像这样 节点服务器 const app = express(); app.post('/makeOrder', function(req, res){ // Do some database logic that pushes the order into my database
const app = express();
app.post('/makeOrder', function(req, res){
// Do some database logic that pushes the order into my database
// This is where I'm stuck.
// I want to notify the client that the order is placed.
// Would it look something like this?
io.in('kitchenSocket').emit('order-placed', 'An order has been placed!');
// Last send something to finish the request
res.send({test:"order placed"})
}
app.post('/makeOrder', function(req, res){
// Do logic
var javascriptObject = {};
io.emit("someName", javascriptObject);
res.send({test:"Some message"});
}
网络客户端
<script src="/socket.io.js"></script>
<script>
// What I currently have
var socket = io.connect('http://localhost:5554/kitchenSocket');
socket.on('order-placed', function (data) {
alert("an order has been placed:" + data)
});
</script>
<script src="/socket.io.js"></script>
<script>
this.socket = io('/', {transports: ['websocket']});
socket.on('someName', function (data) {
// Do client stuff
});
</script>
//我现在拥有的
var socket=io.connect('http://localhost:5554/kitchenSocket');
socket.on('order-placed',函数(数据){
警报(“已下订单:+数据”)
});
如何让它在被命中的express端点上发出消息?以下是一些代码,我必须执行一些非常类似的操作,您需要添加一些更改,但这是一个总体思路。主要区别在于我使用的是Redis服务器。让我知道这是否有帮助,或者您是否有后续问题 服务器端代码
var io = require('socket.io').listen(app);
var redis = require('socket.io-redis');
io.adapter(redis({ host: config.redis, port:config.redisPort }));
//sets allowed origions
io.set("origins", "*:*");
let sockectObj = [data to be sent]
io.emit('notification', sockectObj);
前端代码
this.socket = io(CONFIG.socket, { query: [naming parameter] });
this.socket.on("notification", function (resObj) {
//Action to be performed
}.bind(this));
为任何需要的人使用Express代码: 节点服务器
const app = express();
app.post('/makeOrder', function(req, res){
// Do some database logic that pushes the order into my database
// This is where I'm stuck.
// I want to notify the client that the order is placed.
// Would it look something like this?
io.in('kitchenSocket').emit('order-placed', 'An order has been placed!');
// Last send something to finish the request
res.send({test:"order placed"})
}
app.post('/makeOrder', function(req, res){
// Do logic
var javascriptObject = {};
io.emit("someName", javascriptObject);
res.send({test:"Some message"});
}
客户端
<script src="/socket.io.js"></script>
<script>
// What I currently have
var socket = io.connect('http://localhost:5554/kitchenSocket');
socket.on('order-placed', function (data) {
alert("an order has been placed:" + data)
});
</script>
<script src="/socket.io.js"></script>
<script>
this.socket = io('/', {transports: ['websocket']});
socket.on('someName', function (data) {
// Do client stuff
});
</script>
this.socket=io('/',{transports:['websocket']});
socket.on('someName',函数(数据){
//做客户的事情
});
您测试过这个吗?如果测试过,结果会是什么?我测试了一些逻辑上相似的东西,但不是这个确切的代码。我现在就去。目前,我什么都没有得到。没有错误,但我也没有看到警报(“已下订单”)
。不过,我已经得到了一些打印在初始连接,所以我知道这至少是工作。谢谢!这足以帮助我配置它。我想最重要的是我把io.in(“kitchensocket”).emit改为仅io.emit。这个答案可以简化为只包含解决此问题所需的代码?那么,没有redis,情况会怎样?有什么不同吗?[set allow origins是一般思维中的一个很好的例子!]