javascript - 在运行时使用参数更改 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;
}
解决方案
因为您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;
}
推荐阅读
- javascript - 未捕获(承诺中)ReferenceError:在初始化之前无法访问“USER_REPOS_API_URL”
- vue.js - 为 Vue 应用创建动态 .htaccess
- google-drive-api - 检索访问令牌时出错 FetchError:对 https://oauth2.googleapis.com/token 的请求失败,原因:读取 ECONNRESET
- corda - 更新 LinearState 时如何更新 PersistentState
- sql - 如何在 SAS 的 proc sql 查询中选择列名“startwith”
- excel - VBA - 宏记录器更改单元格颜色未按预期工作
- ios - 如何通过编程或脚本在 iPhone 中使用坐标进行触摸或滑动?
- amazon-web-services - 无法通过 SSH 连接到 EC2 实例并且无法放置 ECS 任务
- sharepoint - Word 文档搜索 - Sharepoint
- scikit-learn - 如何在一个 ColumnTransformerr 中为所有类型的特征、分类特征和数值特征组合管道?