Как получить идентификатор из параметра пути HTTP-запроса в облачных функциях (nodejs)

# #node.js #typescript #express #google-cloud-functions

Вопрос:

В настоящее время я разрабатываю бессерверное приложение с облачными функциями GCP (nodejs). В следующем коде я могу разделить поведение в зависимости от метода запроса, но я не знаю, как получить идентификатор параметра path.

Например, если я хочу получить одного пользователя, путь будет /users/:id. Я хочу получить идентификатор в пути и выполнить поиск в базе данных, но я застрял, потому что не могу получить идентификатор. (ПОСТАВИТЬ и УДАЛИТЬ тоже) Кто-нибудь знает что-нибудь об этом?

Я думал, что смогу получить это с помощью req.params.id, но я думаю, что нет….

 import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions';

export const httpServer: HttpFunction = (req, res) => {
  const path = req.path;
  switch(path) {
    case '/users' :
      handleUsers(req, res);
      break;
    default: 
      res.status(200).send('Server is working');
  }
};

const handleUsers: HttpFunction = (req, res) => {

  if (req.method === 'GET') {
    res.status(200).send('Listing users...');
  } else if (req.method === 'POST') {
    res.status(201).send('Creating User...')
  } else if (req.method === 'PUT') {
    res.status(201).send('Updating User...')
  } else if (req.method === 'DELETE') {
    res.status(201).send('Delating User...')
  } else {
    res.status(404);
  }
}


export const helloWorld: HttpFunction = (req, res) => {
  res.send('Hello, World');
};
 

Есть еще одна проблема.

Например, обработчики не будут вызываться, если путь «/users/1» в текущем операторе swich. Поэтому мы тоже хотим решить эту проблему.

Кроме того, в будущем могут появиться пути типа «/users/1/hogehoge» ….

Ответ №1:

Вам необходимо использовать свойство Express params request , но вы должны отметить следующую опцию, подробно описанную в документе: Когда для определения маршрута используется регулярное выражение, «группы захвата предоставляются в массиве с использованием req.params[n] , где n находится n-я группа захвата».

Таким образом, должно сработать следующее:

req.params[0]


req.params на самом деле возвращается { '0': '...' }

Комментарии:

1. Спасибо за ответ. Когда я смотрю на req.params[0], он возвращает «пользователи/1». Есть ли какой-нибудь способ получить только идентификационную часть этого? Например, когда я использую экспресс-маршрутизатор, я могу получить идентификатор от req.params.id, и я хочу сделать то же самое.

2. Я боюсь, что вам нужно использовать str.split('/') и взять второй элемент возвращаемого массива.

3. Спасибо вам за ваш ответ. Таким образом, я смог получить удостоверение личности. Однако есть и другая проблема. Например, если путь «/users/1» в текущем операторе swich, обработчики не будут вызываться. Поэтому мы тоже хотим решить эту проблему. Кроме того, в будущем может появиться путь типа «/users/1/hogehoge»….

4. Вы можете задать новый вопрос с этими новыми деталями. Добавьте как можно больше деталей, в частности точные пути. Вы можете принять и озвучить этот ответ, если он решил вашу первоначальную проблему.

5. Спасибо. Я пока закрою этот вопрос.