我目前正在为我的应用开发客户端。
当我尝试在电子邮件和密码正确的情况下登录用户时,一切正常,但由于status(400)
阻止了发送错误数据,因此未发生错误消息。
这是我用于用户登录的服务器端代码的一部分,该代码未使用isAuth, message, err
发送对象:
User.findOne({ email: req.body.email }, (err, user) => {
if (!user) return res.status(400).json({
isAuth: false,
message: "Auth failed, bad email",
err
})
但是当我这样做的时候,我得到了所有参数的错误:
User.findOne({ email: req.body.email }, (err, user) => {
if (!user) return res.json({
isAuth: false,
message: "Auth failed, bad email",
err
})
另一个奇怪的事情是,当我向邮递员发送错误的请求时,我正在获取所有响应数据。
这是发出请求的客户端函数,console.log(request)
部分由于状态400而被阻止:
const submitForm = async (e) => {
e.preventDefault()
const request = await axios.post('/api/login', { email: email, password: password }).then(res => res.data)
console.log(request)
dispatch({
type: "USER_LOGIN",
payload: request
})
}
这是来自控制台的一些Chrome内容:
xhr.js:166 POST http://localhost:3000/api/login 400 (Bad Request)
createError.js:17 Uncaught (in promise) Error: Request failed with status code 400
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:60)
答案 0 :(得分:0)
出现了axios错误/错误。
我已使用fetch
API重写了代码。似乎axios在处理4xx和5xx状态时存在某种错误。
现在客户端部分看起来像这样:
const submitForm = async (e) => {
e.preventDefault()
const request = await fetch('/api/login', {
method: 'POST',
body: JSON.stringify({ email, password }),
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json())
console.log(request)
dispatch({
type: "USER_LOGIN",
payload: request
})
}
在服务器端,一切都应按原样进行,return res.status(400).send(data)