我正在为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);
};
登录仅是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”,则会得到:
结果{ 这里有完整的响应以及数据属性。 数据:““密码”的长度必须至少为5个字符” }
我一直在阅读Express文档。它没有说明如果代码为400则不发送响应(尽管在错误请求时不发送任何内容是有意义的)。我也对'body-parser'玩了一点,但没有得到不同的结果。
但是,如果我在邮递员中测试,它的工作原理就像一种魅力!使用相同的输入,我会得到状态码和消息。
最后,可以验证发送的输入(客户端)和接收的数据(服务器)对吗?如果是这样,假设客户端输入正确,但服务器不正确。服务器应该以任何问题(我要解决的问题)做出响应,还是简单地说“ ERROR”(当前情况)?
谢谢。
答案 0 :(得分:1)
Axios代码示例,可能会给出代码来解决您的问题。问题出在您的参数上。
axios({
url: '/login',
method: 'post',
params: { username: 'cedas', password: 'fredsed' }
}).then(response => {
resolve(response)
})
.catch(error => {
reject(error)
});
})
答案 1 :(得分:0)
最后,问题出在访问 ex.message ,而不是 ex.response ...干杯。