# #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. Спасибо. Я пока закрою этот вопрос.