Node.js统一方法间错误处理

service层解藕(Promise化)

为了将service层解藕,我对项目进行了如下改造

  1. 将所有的方法的返回修改为promise

    1. 如果服务成功,返回resolve, 如果服务失败,返回reject

    2. 可以直接使用静态方法

      1
      2
      return Promise.resolve(msg)
      return Promise.reject(msg)
  2. 方法间使用async/await

统一错误格式

因为可以自己定义错误信息,自由度高, 有的时候返回的错误是一个Error对象,有的时候可能是字符串

为了确保错误信息可以打印,可以进行判断

1
2
3
4
5
res.json({
result: 1,
msg: '失败!',
err: err && err.message ? err.message : err
});

错误处理方法

  1. 单独的一个服务,可以直接在promise的reject处理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    await service.functionA(param1,param2).then(
    () => {
    res.json({
    result: 0,
    msg: 'success!'
    });
    },
    err => {
    res.json({
    result: 1,
    err: err && err.message ? err.message : err
    });
    }
    );
  2. 如果服务太多,可以统一使用try/catch

    1
    2
    3
    4
    5
    6
    try{
    await serviceA;
    await serviceB;
    }catch(err){
    console.log(err)
    }