Конечно, это возможно!
Взято из express API-интерфейса:
res.status (код)
Устанавливает статус HTTP для ответа. Это цепочечный псевдоним Node's response.statusCode.
res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')
Обычно отправка кодов состояния - это путь к go. Если вы отправляете данные без кода состояния, express автоматически добавит код состояния 200, поэтому вам не нужно добавлять его вручную.
На стороне клиента вы должны проверить не Код статуса 2xx в вашем объекте ответа на ваш запрос. Вот пример использования api fetch.
fetch('/your/api')
.then((response) => {
if (!response.ok) { // Check for a non 2xx status code
throw new Error('Network response was not ok');
}
// Do something with the response data
})
.catch((error) => {
// This is only reached when a network error is encountered or CORS is misconfigured on the server-side
console.error('There has been a problem with your fetch operation:', error);
});
Пример: учетные данные Use Case Если вы хотите написать веб-страницу с формой для ввода пользователя учетные данные, чтобы получить доступ к дальнейшему контенту, я бы предложил сделать это следующим образом:
// Function is listening to the submit event of your login form
function submitLoginForm() {
let username = document.getElementById("username").value;
let password = document.getElementById("password").value;
const options = {
method: 'POST',
body: JSON.stringify({ username, password }),
headers: {
'Content-Type': 'application/json'
}
};
return fetch('/api/login', options)
.then((response) => {
// Check for a non 2xx status code
if (!response.ok) {
// Show a failed login hint
showMessageBox('Login was not granted by the server. Please check you user name or password and try again.', 'error');
}
// Your login was successfull, manually redirect to user's dashboard, or whatever content...
})
.catch((error) => {
// This is only reached when a network error is encountered or CORS is misconfigured on the server-side
console.error('There has been a problem with your fetch operation:', error);
});
}
app.post('/api/login', (req, res, next) => {
let username = req.body.username;
let password = req.body.password;
checkCredentials(username, password, (err) => {
if (err) {
return res.status(400).send('Wrong user name or password.');
}
// Consider adding a token or a cookie to the response object, so that the user keeps logged in.
return res.send('Access granted.');
});
});