Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 根据URL参数在app.use()中发送不同的路由器_Javascript_Node.js_Express - Fatal编程技术网

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

Javascript 根据URL参数在app.use()中发送不同的路由器,javascript,node.js,express,Javascript,Node.js,Express,我正在用Express编写一个程序(以帕格为模板引擎),在外部文档中使用路由器。我试图避免为每个页面创建一个单独的应用程序。使用(),但我不知道如何根据URL更改我使用的路由器。我可以将req.params.page存储在一个全局变量中,但这会变得非常混乱,很容易中断 理想情况下,我希望这样做——能够将信息从第一个函数传递到下一个routes[]参数 // route static urls const registerRouter = require('./routes/register')

我正在用Express编写一个程序(以帕格为模板引擎),在外部文档中使用路由器。我试图避免为每个页面创建一个单独的
应用程序。使用()
,但我不知道如何根据URL更改我使用的路由器。我可以将
req.params.page
存储在一个全局变量中,但这会变得非常混乱,很容易中断

理想情况下,我希望这样做——能够将信息从第一个函数传递到下一个
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'));
const express=require('express');
常量app=express();
应用程序使用(功能(请求、恢复、下一步){
console.log(“您的中间件”);
next();
})
常数路由=[
“”//空字符串也可以服务于“/”->/routes/index.js
"登记册",,
“登录”
];
对于(设i=0;iconsole.log('running');

这里有一个指向工作示例的链接-

这也将使您不必手动需要路由器,即代码的第1-4行