Я использую Express JS для обработки маршрута http://localhost:3000/location, который позволяет сочетать параметры и фиксированные конечные точки. Например:
http://localhost:3000/location - это корень маршрута, который отображает список местоположений.
http://localhost:3000/location/map отображает список местоположений на веб-карте.
http://localhost:3000/location/:id содержит параметр для идентификатора местоположения, указанного в URL-адресе, и при вызове отображает представление с подробностями данного местоположения, которое поступает из запроса к базе данных.
'use strict';
var path = require('path');
var express = require('express');
var router = express.Router();
/* GET route root page. */
router.get('/', function(req, res, next) {
// DO SOMETHING
});
/* GET the map page */
router.get('/map', function(req, res, next) {
// DO SOMETHING
});
/* GET individual location. */
router.get('/:id', function(req, res, next) {
// DO SOMETHING
});
module.exports = router;
Это лучший способ обработки маршрута со смешанными фиксированными значениями и параметризованными параметрами?
Более конкретно, как правильно решить проблему, когда, например, когда я вызвал «http: // localhost: 3000 / location / SOMETHINGWRONG», сработал http://localhost:3000/location/:id, что привело к ошибке запроса к базе данных, потому что «SOMETHINGWRONG» не было целым числом и не могло пройти?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете ограничить правило регулярным выражением в своем маршруте, например, если вы ожидаете получать только целые числа, вы можете использовать что-то вроде этого:
router.get('/:id(\\d{12})', (req, res) => {
//...
});
введите метод, если вы соответствуете правилу, где "id" - это число из 12 символов.
Проверять только числа:
app.get('/:id(\\d+)', function (req, res){
...
});
Проверяйте только числа, используйте этот пример app.get('/:id(\\d+)', function (req, res){ // req.params.id is now defined here for you });
Чтобы иметь больший контроль над точной строкой, которая может быть сопоставлена параметром маршрута, вы можете добавить регулярное выражение в круглые скобки (()). Пример: ваш идентификатор - целое число длиной не более 10 символов.
/* GET individual location. */
router.get('/:id([0-9]{1,10})', function(req, res, next) {
// DO SOMETHING
});
Спасибо! Я изменил код в качестве вашего ответа. Например, когда я позвонил «локальный: 3000 / расположение / 579», я получил ошибку 404 Not Found.