错误信息返回的疑问

来源:5-11 注册API-格式校验-抽离中间件

Bingyuan

2019-11-19

老师,在validator中间件中,如果校验出错,出错的信息是这么返回的

if (err) {
      ctx.body = new ErrorResModel(validateFailInfo);
      return;
    }

而在控制器中,成功和失败的信息,又是这么写的

if (result) {
    return new SuccessResModel(result);
  } else {
    return new ErrorResModel(registerUserNameNotExistInfo);
  }

都是把数据返回,为什么上面要写成返回到response中,我试了如果不这样写会报错,而下面可以直接返回呢?我基础比较差,不是太懂这块的原因,请解答下,谢谢!

写回答

2回答

双越

2019-11-19

首先,你提的问题,文字描述和代码格式非常清晰。markdown 语法过关,这是程序猿的必备素质。点赞。


你第一段代码中,ctx.body = xxx ,是直接返回 http 请求了。即直接将错误信息返回给客户端了。

你第二段代码中,return xxx 是 JS 函数的中的返回,你要看这 return xxx 到底返回给了谁?谁接收了?接收之后又做了什么处理?—— 通过这个思路,你去找,肯定能找到答案。

实在找不到,再来回复我。

0
1
Bingyuan
非常感谢!
2019-11-22
共1条回复

Bingyuan

提问者

2019-11-22

明白了,谢谢老师,路由上直接写的中间件调用了controller,所以controller里返回的数据是赋值给了这个中间件,然后中间件再负责返回response给客户端。

而路由调用的其他抽离的中间件,由中间件把response直接返回给客户端了。

归根结底,是中间件负责给response的body赋值。

1
1
双越
是的,明白这一点,对于 server 端 http 的 response 相信你有一个更加深入的理解。
2019-11-22
共1条回复

Node.js+Koa2框架生态实战 - 从零模拟新浪微博

用 Koa2 做真正的实战项目,不再只是增删改查的小白工程师

964 学习 · 388 问题

查看课程