Параметры маршрута в Express JS

Я использую 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» не было целым числом и не могло пройти?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
3 184
2

Ответы 2

Вы можете ограничить правило регулярным выражением в своем маршруте, например, если вы ожидаете получать только целые числа, вы можете использовать что-то вроде этого:

router.get('/:id(\\d{12})', (req, res) => {
//...
});

введите метод, если вы соответствуете правилу, где "id" - это число из 12 символов.

Проверять только числа:

app.get('/:id(\\d+)', function (req, res){ 
...
});

Спасибо! Я изменил код в качестве вашего ответа. Например, когда я позвонил «локальный: 3000 / расположение / 579», я получил ошибку 404 Not Found.

alextc 03.07.2018 02:43

Проверяйте только числа, используйте этот пример app.get('/:id(\\d+)', function (req, res){ // req.params.id is now defined here for you });

EdHuamani 03.07.2018 18:20

Чтобы иметь больший контроль над точной строкой, которая может быть сопоставлена ​​параметром маршрута, вы можете добавить регулярное выражение в круглые скобки (()). Пример: ваш идентификатор - целое число длиной не более 10 символов.

/* GET individual location. */
router.get('/:id([0-9]{1,10})', function(req, res, next) {
  // DO SOMETHING
});

Другие вопросы по теме