Node.js 如何在快速路线中使用socket.io?
我正在使用带有Socket.io的Express,但我不知道如何在Express routes中使用Socket.io 我最终在“app.js”中这样做 我如何像这样定义到“/cmp”的路由并在内部传递var“io” 因此,在“/routes/cmp.js”中,我可以这样做:Node.js 如何在快速路线中使用socket.io?,node.js,express,socket.io,Node.js,Express,Socket.io,我正在使用带有Socket.io的Express,但我不知道如何在Express routes中使用Socket.io 我最终在“app.js”中这样做 我如何像这样定义到“/cmp”的路由并在内部传递var“io” 因此,在“/routes/cmp.js”中,我可以这样做: exports.cmp = function(req, res){ var product_id = req.body.product_id; var bid = req.body.bid.split('b
exports.cmp = function(req, res){
var product_id = req.body.product_id;
var bid = req.body.bid.split('b')[1];
io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid});
response.json(200, {message: "Message received!"});
};
一些线索?高阶函数怎么样
exports.cmp = function(io) {
return function(req, res){
var product_id = req.body.product_id;
var bid = req.body.bid.split('b')[1];
io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid});
response.json(200, {message: "Message received!"});
}
};
然后
app.post('/cmp', routes.cmp(io));
作为另一种选择,我有时会使用以下格式设置路线:
var routes = require('./routes/routes');
routes(app, io);
然后将路线定义为
module.exports = function(app, io) {
app.post('/cmp', function(req, res){
var product_id = req.body.product_id;
var bid = req.body.bid.split('b')[1];
io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid});
response.json(200, {message: "Message received!"});
})
};
您可以在路由之前使用简单的中间件,然后在res对象中使用
app.use((req, res, next) => {
res.io = io
next()
})
高阶函数的想法很棒,谢谢。我两天的奋斗终于结束了。谢谢,这是我想要的答案。最好的解决办法是:这有缺点吗?对我来说,这似乎是一个更好的选择/解决方案,需要最少的重构,而且可以socket.broadcast.emit
而不仅仅是io.emit
?
module.exports = function(app, io) {
app.post('/cmp', function(req, res){
var product_id = req.body.product_id;
var bid = req.body.bid.split('b')[1];
io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid});
response.json(200, {message: "Message received!"});
})
};
app.use((req, res, next) => {
res.io = io
next()
})