Как обрабатывать маршруты с необязательным символом 's' в конце - PullRequest
1 голос
/ 05 июля 2019

В моем бэкэнде REST API у меня есть маршруты для обработки продуктов

[GET] /products
[GET] /product/:id
[POST] /product/:id

Я хочу обработать их все в одном маршрутизаторе (потому что все эти пути работают на продуктах), но проблема в том, что я нене знаю, как различить /products и /product.Я пытался использовать регулярные выражения, такие как /product+[s]?, но затем /products/:id также становится допустимым путем, который должен быть недопустимым.

Как обрабатывать /products и /product/:id в одном маршрутизаторе?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Надлежащая структура API REST для конкретного продукта - plural/{id}, поэтому в вашем случае в идеале это должно быть /products/:id.

Но, сказав, что вы можете использовать Regex для сопоставления с дополнительным s.

app.all('/products?/:id?', function (req, res) {
 //will match /product/id also /products/id also /product also /products
}) 

Проверьте official doc для получения дополнительной информации.

0 голосов
/ 05 июля 2019

Предполагая, что вы используете экспресс-каркас, вы можете использовать app.all() маршрут для всех методов запроса, например, GET,POST,DELETE и получать или отображать данные по условию на основе метода запроса.

Для дальнейшей справки https://expressjs.com/tr/guide/routing.html

пример:

const express = require('express');
var bodyParser  = require('body-parser');
const url = require('url');

const app = express();
app.use(bodyParser.json());

app.get('/', (req, res) => {
  res.send('Hello Express app!')
});

//app.all() will accept GET, POST, PUT, DELETE request method

app.all('/products', function(req, res) {

  var id = req.query.id;

  if (req.method == 'POST') {

    console.log(req.body);

    res.send('return post data');

  }
  else {

    if (id == undefined || id == null) {

      //route : GET /products

      res.send('return all products list');

    } else {

      //route : GET /products?id=1

      res.send('return individual product detail');

    }

  }

})


app.listen(3000, () => {
  console.log('server started');
});

Тест:

 1. To list all products 

    Method GET /products

 2. To get individual product detail

     Method GET /products?id=2

 3. To add new product into list

     Method POST /products
     Request Body (application/json)
     {
        "name":"xyz",
        "description":"Lorem ipsum is placeholder"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...