我可以这样设置两条路线
index.js
var express = require('express');
var app = express();
var router = express.Router();
const PORT = 3001;
app.get('/', function(req, res){
res.send('hello app');
});
app.use('/routes', require('./routes'));
app.listen(PORT, function(){
console.log('listening on port:', PORT);
});
./routes/index.js
var express = require('express');
var app = express();
var router = express.Router();
router.use('/sub1', require('./sub1'));
router.use('/sub2', require('./sub2'));
module.exports = router;
./routes/sub1.js
var express = require('express');
var app = express();
var subOneRouter = express.Router();
subOneRouter.get('/', function(req, res){
res.json({route: 'sub1-base'});
});
subOneRouter.get('/:id', function(req, res){
res.json({'route': 'sub1-base', 'id': req.params.id});
});
module.exports = subOneRouter;
为了简洁,./routes/sub2.js 看起来完全一样,但是它的变量被命名为 subTwo
在 sub1 下嵌套 sub2 的最短方法是什么?在 index.js 我尝试过
var subOne = router.use('/sub1', require('./sub1'));
subOne.use('/sub2', require('./sub2'));
但这根本不起作用。在 index.js
中router.use('/sub1/:id/sub2', require('./sub2'));
//localhost:3000/sub1/123/sub2/456 => { "route": "sub2-base","id":"456"}
确实有效,但如果结构变得更长,它似乎会变得冗长且难以维护。最好的方法是什么?有没有更短的方法来嵌套这些?
最佳答案
您在 index.js 中的代码很难理解您想要什么。到目前为止,我知道您想要一个类似 /sub1/:id/sub2
但更易于编写和维护以及在 index.js 中的路由。
所以是的,你可以做到,而且非常简单。
你只需要 require
sub1
和 sub2
和 use
sub2
在 sub1
,然后你可以在路由器上挂载sub1
。
例如:
var sub1= require('./sub1');
var sub2 = require('./sub2');
sub1.use(sub2);
router.use('/sub1:id', sub1);
所以你的 index.js 变成了,
var express = require('express');
var app = express();
var router = express.Router();
const PORT = 3001;
app.get('/', function(req, res){
res.send('hello app');
});
var sub1= require('./sub1');
var sub2 = require('./sub2');
sub1.use(sub2);
router.use('/sub1:id', sub1);
app.listen(PORT, function(){
console.log('listening on port:', PORT);
});
这不会很难维护。如果这不是您要找的,请告诉我。
关于javascript - 使用 Express 嵌套路由器的正确/简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759642/