junixapp / QingBlogBackend

Qing博客系统后台,基于Koa2和NodeJs编写。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QingBlog后端

Koa2套件 + mongoose

前端项目为QingBlog前端

结构说明

  • app.js负责加载router、middlewares,连接db
  • router层只负责映射路由,调用controller层,然后响应success数据,不应该抛出异常,不应该响应错误的数据
  • controller层为router层服务,负责执行业务逻辑,参数检查,读取db,返回数据,抛出异常
  • 中间件负责处理所有的错误返回
  • model为数据结构层

中间件说明

  • rest_handler.js负责给ctx安装success方法和error方法,分别是返回成功的数据和失败的数据
  • err_handler.js是全局的错误处理中间件,负责处理所有错误的返回,包括api级别,数据库级别,其他未知错误
  • auth_handler.js是负责验证token
  • permission_handler.js是负责权限检查

RestfulAPI设计

code采用字符串,目的是不用查表。

  • 成功只有一种,msg只是辅助客户端,所以http响应码为200,内容是:

    { code: "success", msg: "成功", data: xx }
  • 失败响应码采用500:错误码按照模块分类:

    { code: "errCode", msg: "errMsg" }

    比如errCode设计如下:

    TokenNotExist - token不存在
    TokenInvalidToken - token失效
    AuthUsernamePswNotMatched - 用户名或密码错误
    AuthUserNotExist - 用户不存在
    BlogNameExist - 名字已存在
    BlogNotFound - 博客不存在
    

全局错误处理

所有的中间件都将错误抛出,由最外层的error_handler中间件来处理,包括数据库异常,最后将错误信息封装为json返回。 注意,有时候布局代码(比如中间件代码或者controller)可能要try/catch局部异常,此时千万不要把await next()写到try块里面;或者你写进去了, 那么catch块,一定要有个throw操作,否则后续中间件的异常将被此处捕获,全局错误处理器将失效。

启动和部署

使用pm2。

About

Qing博客系统后台,基于Koa2和NodeJs编写。


Languages

Language:JavaScript 96.2%Language:HTML 3.8%