我有快递服务器。当我发送获取请求时,我使用中间件功能授权,用于检查数据库中该用户的令牌。但是,我有一个问题:当我尝试发送响应错误时,我的响应向我发送了一个空对象,但是console.log向我显示了该错误!我究竟做错了什么???这是我的代码:
const auth = async(req,res,next)=>{
try {
const token = req.header('Authorization').replace('Bearer ','')
const decode_token = jswt.verify(token,'mytoken')
const user =await User.findOne({"_id": decode_token._id, "tokens.token":token})
if (!user){
throw new Error('Please autorizate')
}
req.token = token
req.user = user
next()
} catch (error) {
console.log(error)
res.status(401).send({"err":error})
}
}
答案 0 :(得分:3)
在收到错误时发送消息时会发生问题。
如果要发送文本消息,请将字符串传递给send
函数,或使用json
函数发送JSON对象。
示例:
{
console.log(error)
res.status(401).send("Bad login")
}
{
console.log(error)
res.status(401).json({error: "Bad login"})
}
答案 1 :(得分:3)
问题是无法对JavaScript错误对象进行字符串化, 错误对象不为空,您可以访问err.message上的错误消息 如果您通过控制台记录错误,您将发现错误对象不为空
答案 2 :(得分:1)
您可以像下面的代码一样发送响应。
res.status({ status: 500 }).json({ message:'internal server error' });
答案 3 :(得分:0)
参考https://expressjs.com/en/guide/error-handling.html
Express会自行捕获。
请尝试发送您的回复if(!user){ res.sattus(401).send({error: 'Not authorized'});}
您只能在catch块设置状态。