当前位置:  开发笔记 > 编程语言 > 正文

使用普通Express.js进行分层路由

如何解决《使用普通Express.js进行分层路由》经验,为你挑选了1个好方法。

我正在使用Node和Express实现RESTful API.说到路由,目前它看起来像这样:

var cat = new CatModel();
var dog = new DogModel();

app.route('/cats').get(cat.index);
app.route('/cats/:id').get(cat.show).post(cat.new).put(cat.update);

app.route('/dogs').get(dog.index);
app.route('/dogs/:id').get(dog.show).post(dog.new).put(dog.update);

我不喜欢这个有两个原因:

    猫和狗模型都是实例化的,无论我是否需要它们.

    我必须为每个路径模式重复/ cats和/ dogs

我喜欢这样的东西(当然不行):

app.route('/cats', function(req, res)
{
    var cat = new CatModel();

    this.route('/').get(cat.index);
    this.route('/:id').get(cat.show).post(cat.new).put(cat.update);
});

app.route('/dogs', function(req, res)
{
    var dog = new DogModel();

    this.route('/').get(dog.index);
    this.route('/:id').get(dog.show).post(dog.new).put(dog.update);
});

现代Express中是否有一种干净的方式,没有任何其他模块(如express-namespace)?我可以为每个模型选择单独的路由器并为其分配app.use('/cats', catRouter).但是,如果我有多个层次结构级别'/tools/hammers/:id'怎么办?然后我会在路由器内的路由器中安装路由器,这对我来说似乎有些过分.



1> Jonathan Lon..:

然后我会在路由器内的路由器中安装路由器,这对我来说似乎有些过分.

也许,但是这是前缀的内置方法-以app.use()一个Router().

var cats = express.Router();
app.use('/cats', cats);

cats.route('/').get(cat.index);
cats.route('/:id').get(cat.show).post(cat.new).put(cat.update);

// ...

而且,要Router .use()彼此定义多个深度:

var tools = express.Router();
app.use('/tools', tools);

var hammers = express.Router();
tools.use('/hammers', hammers);

// effectively: '/tools/hammers/:id'
hammers.route('/:id').get(...);

但是,为了更接近您的第二个片段,您可以定义自定义方法:

var express = require('express');

express.application.prefix = express.Router.prefix = function (path, configure) {
    var router = express.Router();
    this.use(path, router);
    configure(router);
    return router;
};

var app = express();

app.prefix('/cats', function (cats) {
    cats.route('/').get(cat.index);
    cats.route('/:id').get(cat.show).post(cat.new).put(cat.update);
});

app.prefix('/dogs', ...);

app.prefix('/tools', function (tools) {
    tools.prefix('/hammers', function (hammers) {
        hammers.route('/:id').get(...);
    });
});

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有