您可以发送状态代码和 html 网页吗?
Can you send a status code and a html web page?
我在节点中使用 express 框架,我不知道什么是最佳实践,或者这是否是错误的做法,但我想发送一个状态代码,例如res.status(200).send("Success");
如果表单输入与服务器匹配,如果不匹配则发送类似 res.status(403).send("Forbidden");
的内容
然后在网页中我可以用发送的响应更新段落元素。所以用户知道它是否成功。
这可能吗?如果是我该怎么做?还有更好的方法吗?
当然可以!
摘自快递api参考:
res.status(code)
Sets the HTTP status for the response. It is a chainable alias of Node’s response.statusCode.
res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')
通常发送状态代码是可行的方法。如果您发送的数据没有状态码,express会自动添加200状态码,您无需手动添加。
在客户端,您必须在请求的响应对象中检查非 2xx 状态代码。下面是一个使用 fetch api.
的例子
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);
});
示例:凭据用例
如果您想编写一个网页,其中包含用于输入用户凭据以访问更多内容的表单,我建议您按以下方式进行操作:
- 客户端:
// 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.');
});
});
我在节点中使用 express 框架,我不知道什么是最佳实践,或者这是否是错误的做法,但我想发送一个状态代码,例如res.status(200).send("Success");
如果表单输入与服务器匹配,如果不匹配则发送类似 res.status(403).send("Forbidden");
的内容
然后在网页中我可以用发送的响应更新段落元素。所以用户知道它是否成功。
这可能吗?如果是我该怎么做?还有更好的方法吗?
当然可以!
摘自快递api参考:
res.status(code)
Sets the HTTP status for the response. It is a chainable alias of Node’s response.statusCode.
res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')
通常发送状态代码是可行的方法。如果您发送的数据没有状态码,express会自动添加200状态码,您无需手动添加。
在客户端,您必须在请求的响应对象中检查非 2xx 状态代码。下面是一个使用 fetch api.
的例子 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);
});
示例:凭据用例
如果您想编写一个网页,其中包含用于输入用户凭据以访问更多内容的表单,我建议您按以下方式进行操作:
- 客户端:
// 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.');
});
});