javascript - 使用 Express 嵌套路由器的正确/简洁方法

标签 javascript node.js express router

我可以这样设置两条路线

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 sub1sub2use 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/

相关文章:

node.js - 向 module.exports 添加参数?

javascript - MongoDB Node.js 脚本实现

javascript - 为什么我的NodeJS代码会抛出: ECONNRESET error?

node.js - bcrypt 在生成盐或散列密码时使应用程序崩溃

ajax - 保持数据与服务器同步

javascript - 带有参数的 JQuery 加载到 PHP

Javascript 函数适用于除 Edge 之外的所有浏览器

javascript - 如何将图像像素的贝塞尔曲线生成为预定义形状

javascript - 无法运行 Node JS 部署到 Azure

javascript - 使用 React/Nodejs 通过电子邮件发送生成的 PDF 文件