- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我最近开始在 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/
我正在使用 winston、expressWinston、winston-mongoDB 来管理我的 NodeJs 应用程序中的日志。 同时使用 winston-mongodb transport 和
当我的应用程序启动时,winston 会记录各种信息,例如 winston:create-logger Define prototype method for "error" winston:crea
我正在使用 winston logger 和 wnat 进行流式输入。但我不知道我应该传递给什么。我的记录器: const logger = createLogger({ ... }); Missin
winston.createLogger();显然不是构造函数。为什么会这样? 我看到有些人尝试回滚到winston@3.0.0,但这对我不起作用。我使用的是最新版本的 winston 。以下是 lo
几年前我和 winston 一起工作。当我们在 localhost 上进行开发时,我们的 winston 被配置为输出格式良好、易于阅读的 JSON。 2.x winston npm install
我正在尝试使用 express-winston 和 winston-mongodb 将请求/响应记录到 NodeJS 项目中的 MongoDB。这是我到目前为止工作的示例代码; const expre
我正在尝试在 Node js 中实现一个记录器,它将每天以自定义格式的日志创建一个新的日志文件 为此我使用了三个包 winston morgan winston-daily-rotate-file 所
将 winston 更新至 3.0.0运行我的nodejs应用程序时出现此错误出现以下错误 TypeError: colors[Colorizer.allColors[lookup]] is no
编辑:找到答案,并为 future 的读者发布完整的答案。 我已经掌握了winston logging的基础知识在 Node.js 中,并希望更多地自定义我的日志记录。这是我到目前为止所拥有的: va
我正在使用 winston 登录 Sails 应用程序。这是我的配置: var customLogger = new winston.Logger({ transports: [
所以我使用winston-daily-rotate-file。在 app.js 中我有: var logger = require('./logger'); 然后: logger.info("logg
现在我使用 Winston 来记录最大大小和每日轮换 我希望每个 API 端点都有一个文件,从而定义多个日志文件 我怎样才能实现这一目标? 这是我的 winston 助手类 import * as w
我想在 node 应用程序中使用 winston 记录器将错误记录到文件中。但是 winston 没有写入文件。 var logger = new (winston.Logger)({
我正在使用 创建完整的平均堆栈应用程序 NodeJs , Angular 6 , ExpressJs and MongoDB 我已经成功创建了一个服务器,并且它工作得很好,在我的应用程序中记录错误时,
我正在使用 Winston ^3.0.0-rc6,如下所示: var options = { file: { level: 'info', filename:
我尝试向 winston 添加自定义日志级别。这是记录器的代码: const write = new (winston.Logger)({ transports: [
这是我的 winston 记录器 - var winston = require('winston') var logger = new (winston.Logger)({ transports
我正在使用这样的东西: var winston = require('winston'), logger = new (winston.Logger)({ transports: [ ne
Flatiron 的日志记录库 Winston 非常有用,但我不知道如何为记录器分配名称。我期待与其他日志库类似的输出,例如: [] [] - 是否可以这样配置Winston? 谢谢。 最佳答案
我写了一个小模块,使用 winston 来记录东西。 我使用了 sudo npm install -g winston(它在 vm 上...所以我不太关心 sudo 等。 来自 npm 的日志: wi
我是一名优秀的程序员,十分优秀!