博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NodeJs如何全局统一处理异常,实现RestFull风格
阅读量:6268 次
发布时间:2019-06-22

本文共 1444 字,大约阅读时间需要 4 分钟。

当在controller中处理客户端发来的数据时,我们会去校验数据,当数据错误时,我们会给客户端返回一个信息,如:

export function add (req, res, next) {  console.log(req.body)  /* 检查合法性 */  try {    check(req.body)  } catch (error) {    return next(error)  }  var addUser = new Users(req.body)  addUser.save((error, data) => {    if (error) return next(error)    res.json(GLOBAL.SUCCESS)  })function check (obj) {  /* 手机号码必传 且合法 */  if (!(/^1[34578]\d{9}$/.test(obj.mobile))) {    console.log('error')    throw new Error('手机号码有误,请重填')  }  /* 身份证合法 */  if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(obj.idCard))) {    throw new Error(101, '身份证号码有误,请重填')  }}

但是这样子,返回给客户端的是这样的

手机号码有误,请重填

这严重不符合restFull风格,那么如何做出像Java一样的全局错误处理呢。

自定义异常类

默认的Error只能传一个string参数,我们先扩展这个Error类

class BusinessError extends Error {  constructor (code, msg) {    super(msg)    this.code = code    this.msg = msg    this.name = 'BusinessError'  }}export default BusinessError

controller中返回的不再是Error了,而是返回我们自己定义的BusinessError

function check (obj) {  /* 手机号码必传 且合法 */  if (!(/^1[34578]\d{9}$/.test(obj.mobile))) {    console.log('error')    throw new BusinessError(100, '手机号码有误,请重填')  }  /* 身份证合法 */  if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(obj.idCard))) {    throw new BusinessError(101, '身份证号码有误,请重填')  }}

在App.js中进行拦截

/* 全局错误抛出 */app.use((error, req, res, next) => {  if (error) {    res.json({ msg: error.message, code: error.code })  }});

此时返回给客户端的就是标准restFull风格的格式啦

{    code: 100,    msg: '手机号码有误,请重填'}

转载地址:http://okvpa.baihongyu.com/

你可能感兴趣的文章
Struts2技术详解
查看>>
MFC应用程序向导生成的文件
查看>>
Oracle体系结构之oracle密码文件管理
查看>>
【leetcode】Remove Element (easy)
查看>>
mysql多表查询及其 group by 组内排序
查看>>
alsa的snd_pcm_readi()函数和snd_pcm_writei()
查看>>
Android学习网站推荐(转)
查看>>
嵌入式根文件系统的移植和制作详解
查看>>
MEF部件的生命周期(PartCreationPolicy)
查看>>
LCD的接口类型详解
查看>>
nginx 基础文档
查看>>
LintCode: Unique Characters
查看>>
Jackson序列化和反序列化Json数据完整示例
查看>>
.net 中的DllImport
查看>>
nyoj 517 最小公倍数 【java睑板】
查看>>
include与jsp:include区别
查看>>
ftp的20 21端口和主动被动模式
查看>>
MySQL存储引擎选型
查看>>
Java中的statickeyword具体解释
查看>>
Linux车载系统的开发方向
查看>>