为什么我无法访问 catch 块之外的 res.status(400) 响应?



关于我正在制作的NextJS/Typescript网站的两个问题!目前,我有一个来自前端的身份验证函数,然后在我的后端服务器上处理。在下面的代码中可以看到,当出现错误时,该函数返回res.status(400),当一切正常时,返回res.status(200)。但是,我似乎无法将此状态存储在等待函数结束的responseVariable中。相反,它会立即在前端控制台上显示一个错误。然而,当状态为200时,情况就不一样了;在这种情况下,我可以打印返回的状态。所以我的两个问题是:

  1. 为什么我不能访问responseVariable时,它是一个状态400响应?
  2. 我知道我可以捕获错误而不是查看responseVariable,但我似乎无法访问"丢失的用户名"。应该在错误范围内的消息。记录错误。消息返回"请求失败,状态码为400";有什么方法可以访问JSON中的自定义消息?编辑:当我尝试记录错误。消息,我得到错误:"属性'响应'不存在类型'错误。">

前端调用的认证函数:

const handleAuthentication = async () => {
try {
const responseVariable = await axios({
method: 'POST',
url: '/api/auth',
data: {
username: account,
},
})
console.log(responseVariable) //I get here for 200 status, but not 400
} catch (error) {
console.log(error.message)
}
}

后端授权处理程序:

import type { NextApiRequest, NextApiResponse } from 'next'
import { sign } from 'jsonwebtoken'
const Auth = async (req: NextApiRequest, res: NextApiResponse) => {
const { username } = req.body
if (!username) {
res.status(400).json({ message: 'Missing username' })
return
}
const token = sign({ username },process.env.TOKEN_SECRET as string)
return res.status(200).json({ token })
}
}
export default Auth

您必须使用此表单来访问从api返回的消息

error.response.data.message

我遇到了同样的问题。你正在使用sentry/nextjs包吗?

https://github.com/getsentry/sentry-javascript/issues/6670

已在7.30.0版解决

我更新到最新的哨兵/nextjs版本(7.46.0),它修复了这个问题。

最新更新