我的NodeJS应用数据层中连接到DB的未处理代码片段。我明确地在我的代码中生成错误,同时没有捕获它。这是:
AdminRoleData.prototype.getRoleByRoleId = function (params) {
var connection = new xtrDatabaseConnection();
var query = "CALL role_getRoleByRoleId(:p_RoleId)";
var replacements = { p_RoleId: params.roleId };
replacements = null;
return connection.executeQuery(query, Sequelize.QueryTypes.RAW, replacements);
}
replacementments = null;这是我生成错误的地方。目前没有错误处理。我想在我的应用程序中捕获这些未处理的错误。并希望将它们作为未处理的异常或错误记录到文件中。
process.on('uncaughtException', (err) => {
logger.log('whoops! There was an uncaught error', err);
// do a graceful shutdown,
// close the database connection etc.
process.exit(1);
});
我的问题是我的" uncaughtException"没有被召唤。有帮助吗?或者在这种情况下的最佳实践。或者在一些集中的地方全球捕捉它们。
答案 0 :(得分:1)
只需将代码放在try-catch块中并记录它们即可....
// Defines and manipulates the datepickers
job.dateControl = function() {
var datepickers = $(".js-datepicker");
datepickers.each(function () {
var dateToday = new Date();
$(this).datepicker({
defaultDate: "+1w",
changeMonth: false,
numberOfMonths: 2,
dateFormat: "dd/mm/yy",
beforeShowDay: function (d) {
var dmy = "";
if (d.getDate() < 10) dmy += "0";
dmy += d.getDate();
dmy += "/";
if (d.getMonth() < 9) dmy += "0";
dmy += (d.getMonth() + 1);
dmy += "/";
dmy += d.getFullYear();
console.log(dmy + ' : ' + ($.inArray(dmy, job.unavailableDates)));
if ($.inArray(dmy, job.unavailableDates) !== -1) {
return [false, "", "Unavailable"];
} else {
return [true, "", "Available"];
}
},
minDate: dateToday
});
$(this).datepicker("option", "minDate", dateToday);
});
}
答案 1 :(得分:1)
如果您使用快递,则首先将所有路线定义为:
app.use('/api/users', users);
app.use('/api/accounts', accounts);
...
然后你可以像这样捕捉404错误:
app.use(function(req, res, next) {
console.log("A request triggered 404");
next(err);
});
最后阻止所有错误:
// error handler
app.use(function(err, req, res, next) {
console.log(err.message);
res.status(err.status || 500);
res.render('error');
});
注意:功能的顺序很重要。例如,如果您将404处理程序放在其他路由之前,则所有响应都将为404。 节点将按照您声明它们的顺序遍历路由,直到找到匹配为止。