#node.js #express
#node.js #экспресс
Вопрос:
У меня есть один маршрут, /addresses
который возвращает все адреса пользователя.
Мне нужно создать другой API, который принимает фильтры latitude
и longitude
.
Любой может передать этот фильтр по тому же маршруту, /addresses?lat=23.23amp;lng=-70.22
что и .
В этом случае я должен изменить свой предыдущий метод контроллера, чтобы проверить наличие фильтров.
Возможно ли это в express?Я мог бы создать другой маршрут с точным совпадением со строками запроса.
Как это делается с параметрами запроса /addresses/:addressId
.
Поэтому для этого он попадет в другой контроллер:
/addresses AddressController.getAllAddresses()
/addresses?lat=:latamp;lng=:lng AddressController.getAddressByLatLngFilter()
Ответ №1:
В первом обработчике маршрута вы можете проверить наличие параметров запроса и, если они присутствуют, перенаправить на другой обработчик маршрута:
app.get('/addresses', geo.addresses )
И определите обработчики маршрута таким образом, чтобы можно было перенести на другой:
var this_module = module.exports = {
"addresses": function(req, res, next) {
if (req.query.lat amp;amp; req.query.lng) {
return this_module.addresses_by_loc(req,res,next);
}
// handle one way...
},
"addresses_by_loc": function(req, res, next) {
// handle another
}
}
Комментарии:
1. Спасибо, выглядит лучшим подходом, но все же, возможно ли то, что я упомянул выше?
2. @Magnetaar Я не думаю, что есть способ сделать это, используя шаблоны экспресс-маршрутов, поскольку часть перед
?
определяет маршрут, а часть после — параметры запроса. Тем не менее, это просто синтаксический сахар, выражаете ли вы условную маршрутизацию либо в сопоставлении шаблонов маршрутизатора Express, либо явно в вашем собственном коде. Тем не менее, SO полно сообщений, в которых принятый ответ гласит: «X невозможно», а более поздний ответ показывает, что это так.