如何在Express/node js中发送错误响应?

4

我有一个express服务器。当我发送一个get请求时,我使用一个中间件函数authorization来检查数据库中该用户的令牌。但是,我遇到了一个问题:在尝试发送响应错误时,我的响应返回一个空对象,但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})
}

}


难道不是 res.status(401).json({"err":error}) 吗? - nicholaswmin
1
如果没有用户登录,您可以发送响应 @ if(!user){ res.sattus(401).send({error: 'Not authorized'});} 为什么需要抛出错误然后发送res? - Purushoth.Kesav
2
尝试仅发送错误消息,例如 res.status(401).send(error.message); - SuleymanSah
3个回答

9

在发送错误信息时可能会发生问题。

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

参考:官方Express网站

示例:

{
   console.log(error)
   res.status(401).send("Bad login")
}

{
   console.log(error)
   res.status(401).json({error: "Bad login"})
}

7
问题在于JavaScript的错误对象无法被字符串化,虽然错误对象不是空的,但是你可以通过err.message访问错误消息,如果你将错误记录到控制台,你会发现错误对象不是空的。

3
您可以像下面的代码那样发送响应。
res.status({ status: 500 }).json({ message:'internal server error' });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接