Rob*_*Rob 6 routes url-routing node.js
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个有两个原因:
我喜欢这样的东西(当然不行):
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);
});
Run Code Online (Sandbox Code Playgroud)
现代Express中是否有一种干净的方式,没有任何其他模块(如express-namespace)?我可以为每个模型选择单独的路由器并为其分配app.use('/cats', catRouter).但是,如果我有多个层次结构级别'/tools/hammers/:id'怎么办?然后我会在路由器内的路由器中安装路由器,这对我来说似乎有些过分.
Jon*_*ski 14
然后我会在路由器内的路由器中安装路由器,这对我来说似乎有些过分.
也许,但是这是前缀的内置方法-以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);
// ...
Run Code Online (Sandbox Code Playgroud)
而且,要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(...);
Run Code Online (Sandbox Code Playgroud)
但是,为了更接近您的第二个片段,您可以定义自定义方法:
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(...);
});
});
Run Code Online (Sandbox Code Playgroud)