Ser*_*gey 14 javascript node.js express
以下是Express.js 路由指南中的修改示例:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('Birds home page');
});
router.get('/about', function(req, res) {
res.send('About birds');
});
...
app.use('/birds', router);
app.use('/fish', router);
Run Code Online (Sandbox Code Playgroud)
这版画"关于鸟"当我访问这两个/birds/about和/fish/about.
如何将参数或其他内容传递给路由器,这样,在控制器功能中,它可以分辨出这两条不同的路由?
例如,我想在参观时看到"鸟儿可以飞",参观时/birds/about"鱼可以游泳" /fish/about.
理想情况下,我希望能够传递一些"配置对象",因此迷你应用程序不需要知道它可能安装在所有可能的路径上(在伪代码中):
router.get('/about', function(req, res) {
res.send(magic_configuration.about_text);
});
....
magically_set_config(router, {about_text: "Bears eat fish"})
app.use('/bears', router);
Run Code Online (Sandbox Code Playgroud)
Ser*_*gey 17
这就是我想出的:我将"mini-app配置"分配给req:
app.use('/birds', function (req, res, next) {
req.animal_config = {
name: 'Bird',
says: 'chirp'
};
next();
}, animal_router);
app.use('/cats', function (req, res, next) {
req.animal_config = {
name: 'Cat',
says: 'meow'
}
next();
}, animal_router);
Run Code Online (Sandbox Code Playgroud)
然后在我的路线中我可以访问它们:
var express = require('express');
var router = express.Router();
...
router.get('/about', function(req, res) {
var animal = req.animal_config;
res.send(animal.name + ' says ' + animal.says);
});
Run Code Online (Sandbox Code Playgroud)
这种方法允许轻松地将"迷你应用程序"安装在提供不同配置的另一个位置,而无需修改应用程序的代码:
app.use('/bears', function (req, res, next) {
req.animal_config = {
name: 'Bear',
says: 'rawr'
};
next();
}, animal_router);
Run Code Online (Sandbox Code Playgroud)
您基本上是在谈论将配置注入路由器。
我遇到了类似的问题,并发现理论上您不能导出路由器本身,而是可以导出接受配置并返回创建和配置的路由器的功能。
因此,在您的情况下,调用代码将如下所示:
var animal_router = require('./animal_router')
app.use('/birds', animal_router({
name: 'Bird',
says: 'chirp'
}));
app.use('/cats', animal_router({
name: 'Cat',
says: 'meow'
}));
Run Code Online (Sandbox Code Playgroud)
虽然./animal_router.js可能如下所示:
var express = require('express');
// Create wrapper function that will adjust router based on provided configuration
var wrapper = function (animal_config) {
var router = express.Router();
router.get('/about', function(req, res) {
var animal = animal_config;
res.send(animal.name + ' says ' + animal.says);
});
return router;
}
module.exports = wrapper;
Run Code Online (Sandbox Code Playgroud)
因此,如果您想通过url提供更改,则可以注入如下参数:
router.get('/:animal/about', function(req, res) {
// here we have bird or fish in req.params.animal
if(req.params.animal == 'bird') {
res.send('Birds can fly');
} else if(req.params.animal == 'fish') {
res.send('Fish can swim');
} else {
res.send('Unknown animal');
}
});
app.use('/', router);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10130 次 |
| 最近记录: |