Как вернуть коды состояния в Express
Для любого разработчика, работающего с API и Express, важно понимать, как вернуть правильные коды состояния HTTP. Коды состояния HTTP — это способ сервера передать статус запроса клиента — был ли он успешным, вызвал ошибку сервера или что-то среднее между ними.
Многие опытные разработчики, вероятно, сталкивались с ситуацией, когда они используют API, а запрос завершается ошибкой, но они понятия не имеют, почему. Если бы API возвращал правильный код состояния вместе с коротким сообщением, это могло бы сэкономить разработчикам часы времени на отладку.
Чтобы сделать обработку ошибок менее болезненным, писать чистый код и делать код централизованным, изучите наше "Руководство по обработке ошибок".
В этой короткой статье мы подробно рассмотрим важность этих кодов состояния и то, как их можно использовать в Express.js, быстром, бескомпромиссном и минималистичном веб-фреймворке для Node.js.
Начнем с самого простого способа вернуть код состояния в Express.js. Это делается с помощью функции res.status()
, где res
— это объект ответа, передаваемый вашему обработчику маршрута callback.
app.get('/api/users', (req, res) => {
res.status(200).json({ message: "Success!" });
});
В приведенном выше примере мы отправляем код состояния 200
, что означает, что запрос был выполнен успешно.
Однако Express.js предлагает более семантический способ отправки многих распространенных кодов состояния HTTP. Например, вы можете использовать res.sendStatus()
вместо res.status().send()
для отправки кодов состояния с кратким сообщением.
app.get('/api/users', (req, res) => {
res.sendStatus(200); // equivalent to res.status(200).send('OK')
});
Примечание: помните, что коды состояния HTTP предназначены не только для успешных запросов. Если вы возвращаете статус ошибки, например 400 для «неверного запроса» или 404 для «не найдено», полезно предоставить дополнительную информацию о том, что пошло не так.
При работе с ошибками мы можем использовать метод res.status()
в сочетании с .json()
для предоставления подробного сообщения об ошибке.
app.get('/api/users', (req, res) => {
res.status(404).json({ error: "User not found!" });
});
Таким образом, клиент получит как код состояния ошибки, так и сообщение с подробным описанием проблемы.
Но как нам обрабатывать непредвиденные ошибки, возникающие во время выполнения нашего кода? Для этого Express.js предлагает функции промежуточного программного обеспечения для обработки ошибок.
Функции промежуточного ПО — это функции, которые имеют доступ к объекту запроса (req
), объекту ответа (res
) и next
функции промежуточного ПО в цикле запроса-ответа приложения. Они могут выполнять любой код, вносить изменения в объекты запроса и ответа, завершать цикл запрос-ответ и вызывать следующую промежуточную функцию в стеке.
Вот базовый пример функции промежуточного программного обеспечения для обработки ошибок:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
В этом примере, если в вашем приложении возникает ошибка, она будет обнаружена этой промежуточной функцией. Функция записывает трассировку стека ошибок и отправляет клиенту код состояния 500
, указывающий на внутреннюю ошибку сервера.
Возврат кодов состояния HTTP в Express.js может осуществляться несколькими способами. Независимо от того, используется ли это с помощью res.status()
, res.sendStatus()
или в сочетании с функциями промежуточного программного обеспечения для обработки ошибок, каждый метод играет роль в передаче состояния клиентских запросов. Понимание этих различных методов поможет нам писать более надежный код, а также удобные для пользователя API.
Потратив время на возврат правильных кодов состояния, вы гарантируете, что ваше приложение эффективно взаимодействует с клиентами, будь то браузеры, сторонние приложения или другие серверы.
В дополнение мы предоставляем вам для изучения статью "Параметры запроса с Express".