首页 > 解决方案 > 在运行时使用参数更改 nodejs 路由

问题描述

我需要在运行时在 nodejs 中更改路由参数。

在我的代码中,我使用以下方法设置了一条路线:

const troutes = require('./src/routes/testroutes')(page,sessionId)
app.use('/teste' + sessionId, troutes)

但是,在运行时,有时会重新创建“页面”对象参数并且它变得无效。但是“sessionId”参数是一样的,没有变化。然后我创建一个新的“页面”并需要重新制作路由,因为旧路由有一个无效页面。如果我使用:

let page={newpage};
const troutes = require('./src/routes/testroutes')(page,sessionId);

我的网址不起作用,因为该路线使用旧的无效“页面”参数对象。

如何删除或更改旧路由并将新路由与新的“页面”对象一起使用?

//server.js

const express = require('express')
const app = express()
const server = require('http').Server(app)
const port = 3001
const host = 'http://localhost'
const callbackUrl = `${host}:${port}`;

let page={page};
let sessionId='sessionId';
const troutes = require('./src/routes/testroutes')(page,sessionId)
app.use('/teste' + sessionId, troutes)
....
});

//routes.js

const express = require('express');
const router = express.Router();
module.exports = function (page,sessionId) {
        router.get('/'+sessionId+'/getMyNumber', async (req, res) => {
            const cc = await page.evaluate(() => {
                return getMyNumber();
            });
            console.log(cc);
            res.send({ "data": cc });
        });

        return router;
    }

标签: javascriptnode.jsexpress

解决方案


因为您require('./src/routes/testroutes')(page,sessionId)在文件中只调用了一次方法,所以它只加载一次。所以在函数中传递的参数/初始化只执行一次。

初始化并返回的路由器用于进一步的请求处理。所以新的请求只会触发路由器的方法。

如果您希望页面是动态的,那么如果您在路由器内部移动页面,而不是像下面这样从包装器函数传递它,它会起作用。

const express = require('express');
const router = express.Router();
module.exports = function (sessionId) {
        router.get('/'+sessionId+'/getMyNumber', async (req, res) => {
             let page = {newPage}
            const cc = await page.evaluate(() => {
                return getMyNumber();
            });
            console.log(cc);
            res.send({ "data": cc });
        });

        return router;
    }

推荐阅读