如何在Express / Node JS中发送错误响应?

时间:2019-12-05 11:51:05

标签: node.js express

我有快递服务器。当我发送获取请求时,我使用中间件功能授权,用于检查数据库中该用户的令牌。但是,我有一个问题:当我尝试发送响应错误时,我的响应向我发送了一个空对象,但是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})
}

}

4 个答案:

答案 0 :(得分:3)

在收到错误时发送消息时会发生问题。

如果要发送文本消息,请将字符串传递给send函数,或使用json函数发送JSON对象。

参考:official express site

示例:

{
   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块设置状态。