我在Express中定义了一个完整的CRUD API,我想删除基础的重复并使用时髦的route
函数,但我担心这是不可能的。
电流:
var router = express.Router();
var base = '/api/foo/bar/';
router.get(base, this.list);
router.get(base + ':id', this.read);
router.post(base, this.create);
router.put(base + :id', this.update);
router.del(base + :id', this.del);
所需:
var router = express.Router();
router.route('/api/foo/bar')
.get(this.list)
.get(':id', this.read)
.post(this.create)
.put(':id', this.update)
.del(':id', this.del)
问题是动词函数(get,post,put,del)不接受字符串作为它们的第一个参数。
是否有类似的方法来实现这一目标?
答案 0 :(得分:7)
重要事项:使用此技术可行,但我们知道从Express 4.3.2开始,嵌套路由器上定义的所有子路由都无法访问在其外部定义的req.params
,也不是param中间件。它完全被隔离了。但是,这可能会在以后的4X版本中发生变化。有关更多(最新)信息,请参阅https://github.com/visionmedia/express/issues/2151。
相反如何:
// api.js
var router = express.Router();
router
.route('/')
.get(this.list)
.post(this.create);
router
.route('/:id')
.get(this.read)
.put(this.update)
.del(this.del);
module.exports = router;
// app.js / main.js
app.use('/api/foo/bar', require('./api'));
或者如果你想一次链接所有这些:
// api.js
var router = express.Router();
router
.get('/', this.list)
.get('/:id', this.read)
.post('/', this.create)
.put('/:id', this.update)
.del('/:id', this.del);
module.exports = router;
// app.js / main.js
app.use('/api/foo/bar', require('./api'));