gpt4 book ai didi

node.js - 处理Node.js中的错误

转载 作者:行者123 更新时间:2023-12-03 08:12:18 25 4
gpt4 key购买 nike

我正在制作一个nodejs Web API,并且我有一个函数可以返回与给定认证 token 关联的用户对象:

module.exports.getByToken = function (token_value, callback)
{
mongoose.model('tokens').findOne({ value: token_value }).exec(function (err, token)
{
if (err || token == null)
{
var error = new Error('couldn\'t find user of the given token');
callback(error, null);
}
else
{
mongoose.model('users').find({ _id: token.user }).exec(callback);
}
});
};

如您所见,我将错误传递回回调,而不是将其抛出。我做对了吗?

从身份验证中间件调用此函数:
app.use('/api', function (req, res, next)
{
var token = req.headers.authorization;

users.getByToken(token, function (err, user)
{
if (err || user == null)
{
res.status(401).end('Unauthorized');
}
else
{
app.locals.user = user;
next();
}
});
});

因此,将错误传递回回调的想法很方便。
但这是处理错误的正确方法吗?

它可以阻塞主线程吗?
我应该抛出错误并在中间件中明确捕获它吗?

谢谢,
阿里克

最佳答案

IMO,您的做法正确。如果回调不负责处理错误,则应将错误作为第一个参数返回。如果您想改善如何处理任何可能的错误,可以将中间件更改为:

app.use('/api', function (req, res, next){
var token = req.headers.authorization;

users.getByToken(token, function (err, user){
if (err){
res.status(500).end('Something went wrong :('); //token could be valid but you have lost your connection to DB or any other error
}else if (user == null){
res.status(401).end('Unauthorized');
}
else {
app.locals.user = user;
next();
}
});
});

关于node.js - 处理Node.js中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34493906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com