Как передать параметр в express.маршрутизатор с JS?
вот модифицированный пример из 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);
это печатает "о птицах", когда я посещаю оба /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);
4 ответов
вот что я придумал: я передаю "конфигурацию мини-приложения", назначив ее 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);
и затем в моем маршруте я могу получить к ним доступ:
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);
});
этот подход позволяет легко монтировать "мини-приложение" в другом месте, обеспечивая другую конфигурацию, без изменения кода приложения:
app.use('/bears', function (req, res, next) {
req.animal_config = {
name: 'Bear',
says: 'rawr'
};
next();
}, animal_router);
Итак, если вы хотите обслуживать изменения по 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);
Вы можете добавить параметры маршрута, как так:
router.get('/about/:param1/:param2', function(req, res) {
//then you can call this handler through /about/1/sometext get these params from request object:
console.log(req.params.param1, req.params.param2); // 1, 'sometext'
res.send('About birds');
});
или вы можете отправить параметры через параметры запроса:
router.get('/about', function(req, res) {
//then you can call this handler through /about?param1=1¶m2=sometext get these params from request object as well:
console.log(req.query.param1, req.query.param2); // 1, 'sometext'
res.send('About birds');
});