gpt4 book ai didi

node.js - 通用错误处理程序 MEANJS、mongoose、winston

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:40 24 4
gpt4 key购买 nike

所以我最近开始在 Node 和 MEAN 中编程,在使用 JAVA 时,我将始终专注于创建可靠应用程序的最佳模式,尽管学习曲线让我很痛苦,但我在这里也尝试同样的方法。无论如何,我正在尝试使用 MEANjs 实现通用错误处理程序要在中心位置设置异常处理程序,请将错误记录到文件中并在发生这种情况时发送电子邮件。
例如从 Mongoose 开始

app.route('/process/:pId').get(function(req, res){ 
pModel.findById(req.params.pId, function(err, doc){
if(err) {//this is so
console.log(err);//repetitive so I would
res.send(500, 'Error: error.');
}//like to send all these errors to a central handler like in express.js below
res.json(200, {data: doc});
});
};);

这是express.js 中的处理程序:

   app.use(function(err, req, res, next) {
if (!err) return next();
// can I call another error handlers at this level??
console.error(err.stack);
// Error page
res.status(500).render('500', { error: err.stack});
});

所以这就是令人困惑的地方,因为我试图用express实现一个中间件,我不确定app.use是否是最好的方法,我已经 read有时这不是最好的方法,或者这仅适用于 Express 3.xx?快车4呢?下面是我用于记录器文件的内容,然后在快速错误处理程序之前使用它是一个很好的做法,还是应该放在处理程序内部?

var logger = expressWinston.logger({
transports:[
new (winston.transports.File)({
filename:'./app/log/winston.log',
colorize: false,
json: true
})
],
statusLevels:true,
meta: true,
msg: 'HTTP {{req.method}} {{req.url}}'
});

所以登陆这个。有没有一种方法可以通过 Express 4 使用 MEANJS 在登录文件时发送电子邮件来设置通用错误处理程序。并摆脱所有这些重复的 Mongoose 错误处理,牢记 MEANJS 的最佳实践。

最佳答案

在我通过检查 Ghost 的代码进行一些调查后,我可以帮助您完成我正在使用的设置。和 Mongoose本身。

我的工作流程正在制作看起来像这样的自定义错误类(实际上我的想法来自 mongoose custom errors

var AppError = function (err) {
var name = "Application Error", msg;
if ( err instanceof Error ) {
msg = err.message;
name = "Application Error [" + err.name + "]";
} else {
msg = err;
}
Error.call(this);
Error.captureStackTrace(this, arguments.callee);
this.message = msg;
this.name = name;
// Here is the interesting part
console.log('An error occured', this);
// Or even let's pretend smtp is our mail module
smpt.send('admin@site.com', err);
}

通过使用它,我总是做类似的事情:

dbUser.find(query, function(err, data) {
if ( err ) return new AppError(err);
// Do other stuff.
});

我通过使用 Promises 进一步改进了这段代码。 (实际上我是从 Ghost 的源代码中获取的)。

Mongoose 默认情况下也支持 Promise。所以你只需做这样的事情:

var wrapError = function(res) { 
return function(err) {
new AppError(err);
res.send(500, "Internal server error");
};
}

稍后在您的查询代码中

dbUser.find(query).exec().then( function(data) { console.log(data) }, wrapError(res) );

希望这可以帮助您进一步了解。

关于node.js - 通用错误处理程序 MEANJS、mongoose、winston,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099281/

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