【问题标题】:Passing Javascript amqplib Channel To Route Middleware In ExpressJS在 ExpressJS 中传递 Javascript amqplib 通道来路由中间件
【发布时间】:2021-03-16 02:00:22
【问题描述】:

我正在尝试在我的 express 服务器启动时创建一个 amqplib 连接/通道,并将其传递给路由,以便它们可以声明队列、发布消息等。我尝试过中间件,但每次你去一个路由和调用中间件,建立新的连接。

我的路由中间件已从 index.js 文件中分离出来,因此请保持整洁,这样我就不能只在 index.js 中定义 amqp 队列/发布逻辑。

例如...

// index.js
// ...
const amqplibConnection = // create amqp connection;
const channel = amqplibConnection.createChannel();

const app = express();
const fooRoutes = require('./routes/foo')
// how can I pass channel to ./routes/foo ???
app.use('/api/v1/foo', fooRoutes);

// routes/foo.js
const router = express.Router();
router.get('/', (req, res) => {
    // declare queue, publish message, etc ...
});

【问题讨论】:

    标签: javascript express rabbitmq microservices amqp


    【解决方案1】:

    您可以在以下代码中找到 mark1。
    mark1:创建新的中间件并将通道分配给req.channel,然后调用next(),你可以在foo.js中使用req.channel

    // index.js
    // ...
    const amqplibConnection = // create amqp connection;
    const channel = amqplibConnection.createChannel();
    
    const app = express();
    const fooRoutes = require('./routes/foo')
    // ================= mark1 =================
    app.use('/api/v1/foo', (req, res, next) => {
        req.channel = channel;
        next();
    }, fooRoutes);
    
    // routes/foo.js
    const router = express.Router();
    router.get('/', (req, res) => {
        // declare queue, publish message, etc ...
        req.channel... // do something
    });
    

    【讨论】:

      猜你喜欢
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      相关资源
      最近更新 更多