[英]app.use(path, router) matches but how do I extract named parameters in path
[英]Send different router in app.use() based on URL parameters
我正在用 Express 编写一个程序(使用 Pug 作为模板引擎),它在外部文档中使用路由器。 我试图避免为每个页面创建一个单独的app.use()
,但我不知道如何根据 URL 更改我使用的路由器。 我可以将req.params.page
存储在全局变量中,但这会变得非常混乱并且很容易中断。
理想情况下,我想做这样的事情 - 能够将信息从第一个 function 传递到下一个routes[]
参数。
// route static urls
const registerRouter = require('./routes/register')
const indexRouter = require('./routes/index')
const loginRouter = require('./routes/login')
// (i just hardcoded this for clarity)
const routes = {register: registerRouter, index: indexRouter, login: loginRouter}
app.use('/:page', (req, res, next) => {
req.info = generatePayload(req, res, next) /* verifies the user's jwt and passes back the payload*/
req.page = req.params.page
next()
}, routes[req.page])
这是我的路由器的外观片段
const express = require('express')
const router = express.Router()
// get & render page
router.all('/', function(req, res, next) {
req.info.title = "register"
res.render('register', req.info)
})
module.exports = router
有什么办法可以实现这一点,还是有更好的方法可以接近它?
如果您不想输入 app.use 的每一行,更好的方法是这样的。
const express = require('express');
const app = express();
app.use(function(req, res, next) {
console.log('your middlewares');
next();
})
const routes = [
'' // an empty string can also serve '/' -> /routes/index.js
'register',
'login'
];
for(let i = 0; i < routes.length; i+= 1) {
app.use('/' + routes[i], require('./routes/' + routes[i]));
}
app.listen(8080, () => console.log('running'));
这是一个工作示例的链接 - https://repl.it/repls/SwelteringHealthyDistributedcomputing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.