node express 异步错误处理?
本文介绍了node express 异步错误处理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
dao 层 daoUser.js
/**
* 用户注册
* @param params
* @param callback
*/
exports.insert = function (params, callback) {
let post = Object.assign(params, {date: new Date()});
pool.query('INSERT INTO user SET ?', post, function (error, results, fields) {
if (error) throw error;
for (let key in error) {
console.log(key + "==" + error[key]);
}
console.log(results);
console.log("============sql===========");
console.log(fields);
callback(JSON.parse(JSON.stringify(results)));
});
}
重复注册导致的唯一约束报错,关键是怎么在外层app.js中去捕获处理。不想所有异步可能出错的地方都加try{}catch 处理
或者从路由层到service层到数据dao层依次把route层的next传递下去?
app.js
//错误处理
app.use(function(err, req, res, next) {
console.log("=================错误处理=================")
//其他 业务逻辑
if (res.headersSent) {
return next(err);
}
res.status(500);
res.render('error', { error: err });
});
这里并没有捕获数据库操作的异常
解决方案
insert函数模拟异步回调写法,让外层去判断声明函数返回的第一个参数是error还是null。
const insert = (data, cb) => {
data...
if(error){
cb(error);
}else{
cb(null, data);
}
}
对应实例
exports.insert = function (params, callback) {
let post = Object.assign(params, {date: new Date()});
pool.query('INSERT INTO user SET ?', post, function (error, results, fields) {
// 下面改了
if (error) {
callback(error);
for (let key in error) {
console.log(key + "==" + error[key]);
}
console.log(results);
console.log("============sql===========");
console.log(fields);
// 下面改了
callback(null, JSON.parse(JSON.stringify(results)));
});
}
外层 express 有(req, res, next) => {}函数,让next()接收insert()函数的返回值,错误最终会传递给APP.js的错误处理中间件,成功执行会跳过。
soonfy
这篇关于node express 异步错误处理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文