Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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
Javascript 在运行时使用params更改nodejs路由_Javascript_Node.js_Express - Fatal编程技术网

Javascript 在运行时使用params更改nodejs路由

Javascript 在运行时使用params更改nodejs路由,javascript,node.js,express,Javascript,Node.js,Express,我需要在nodejs中的运行时更改路由参数 在我的代码中,我使用以下方法设置路线: const troutes = require('./src/routes/testroutes')(page,sessionId) app.use('/teste' + sessionId, troutes) 但是,在运行时,有时会重新创建“page”对象参数,使其无效。但是“sessionId”参数是相同的,没有变化。 然后我创建了一个新的“页面”,需要重新创建路由,因为旧路由有一个无效页面。 如果我使用:

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

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

const troutes = require('./src/routes/testroutes')(page,sessionId)
app.use('/teste' + sessionId, troutes)
但是,在运行时,有时会重新创建“page”对象参数,使其无效。但是“sessionId”参数是相同的,没有变化。 然后我创建了一个新的“页面”,需要重新创建路由,因为旧路由有一个无效页面。 如果我使用:

let page={newpage};
const troutes = require('./src/routes/testroutes')(page,sessionId);
我的URL不工作,因为路由使用旧的无效“页面”参数对象

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

//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;
    }

因为您在文件中只调用了一次
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;
    }

谢谢你的关注。我不能在模块内使用该页面,因为该页面是使用Puppeter创建的chrome页面。当chrome页面崩溃时,我重新创建页面,并将新页面传递给路由器模块。然后,页面始终从路由器模块外部创建。我在chrome页面中加载了一些js函数,要访问这些函数,我需要传递到正确的页面。我需要找到旧路由,将其删除或更新以与新页面一起使用。我不会只调用模块一次,我会调用require('./src/routes/testroutes')(page,sessionId)所有方式我都有一个新页面。因为,我的URL只有在使用新页面访问时才有效。当我有一个新页面时,我使用:const troutes=require('./src/routes/testroutes')(page,sessionId)app。再次使用('/teste'+sessionId,troutes)。但是,在路由器中,当我调用我的URL时,我可以看到页面显示关闭的属性。这表示路由器正在使用旧页。