Параметры маршрута в Express JS - PullRequest
0 голосов
/ 03 июля 2018

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

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

/* GET individual location. */
router.get('/:id([0-9]{1,10})', function(req, res, next) {
  // DO SOMETHING
});
0 голосов
/ 03 июля 2018

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

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

введите метод, если вы соответствуете правилу, где «id» - это число, состоящее из 12 символов

Проверка только номеров:

app.get('/:id(\\d+)', function (req, res){ 
...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...