繁体   English   中英

根据 URL 参数在 app.use() 中发送不同的路由器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM