Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在快速路线中使用socket.io?_Node.js_Express_Socket.io - Fatal编程技术网

Node.js 如何在快速路线中使用socket.io?

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

我正在使用带有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')[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()
})