【发布时间】:2019-06-27 10:56:22
【问题描述】:
我正在开发 express.js 服务器的发布路由。我有一个验证功能,如果未通过,则返回带有消息的 400 代码。客户端(React),收到400码,但我无法访问服务器发送的消息。
这是在快递中的POST:
const { error } = validate(req.body);
if (error)
return res
.status(400)
.send(error.details[0].message);
这是 React 中的提交例程:
doSubmit = async () => {
const { username, password } = this.state.data;
const result = await login({ mail: username, password });
console.log('result', result);
};
Login 只是 axios.post 方法的一个包装器:
export async function login(user) {
try {
return await http.post(apiEndpoint, user);
} catch (ex) {
console.log(ex.message);
return ex;
}
}
目前,代码按原样运行。提交无效输入,例如密码少于 5 个字符,我在客户端中得到以下信息:
POST http://localhost:3000/api/auth 400 (Bad Request)
Request failed with status code 400
result Error: Request failed with status code 400
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:78)
at XMLHttpRequest.wrapped (raven.js:363)
但是,如果我将服务器发送的状态码更改为“200”,我会得到:
结果{ 此处的完整响应以及数据属性.. data: ""password" 长度必须至少为 5 个字符" }
我一直在阅读 Express 文档。如果代码为 400,它并没有说明不发送响应(尽管如果 bad request 不发送任何内容是有意义的)。我也玩弄了一些“body-parser”,但没有得到不同的结果。
但是,如果我在邮递员中进行测试,它就像一个魅力!使用相同的输入,我得到状态码和消息。
最后,验证发送的输入(客户端)和接收的数据(服务器)都可以吗?如果是这样,假设客户端可以输入,但服务器不是。服务器应该响应任何问题(我想要实现的目标),还是简单地说“错误”(当前场景)?
谢谢。
【问题讨论】:
-
你使用哪个http请求库来获取hit api?
-
@ChandanKumar 嘿,使用 axios。
-
最后一个问题:是的,您应该始终验证服务器上的数据。
-
验证只是最佳实践,但问题不同,它与验证无关。