后端架构分层——node.js

nodejs后端项目架构如何分层?

先说明下,本人是前端开发,文章的视角都是从前端工程师的视角出发,哈哈......

代码地址

源代码地址点击这里 文章只是写了大致思路,很多细节未说明,可以看看代码示例。

背景

从前端的认知来看,后端对我们前端来说就是提供了一个接口,我只需要请求这个接口,后端从这个接口返回给我对应的数据就好了,我不关心他做了哪些逻辑。

那现在假如要我开发一个后端项目,提供接口给前端使用,我需要做哪些工作呢?

使用nodejs

前端比较熟悉的能开发接口的工具就是nodejs了,那我们就创建一个nodejs项目吧。 nodejs无需安装,我们直接新建bin文件夹创建一个www.js文件,作为我们服务的入口文件。然后引入http开启服务

我们创建一个http服务,监听下request方法,即前端发来的所有请求都会触发这个方法。 然后在根目录创建一个app.js文件,提供一个serverHandle函数方法,所有的请求都由这个serverHandle函数来处理。

路由

当前端向我们的服务发起接口请求,例如:

所以后端收到请求后先要做这几个事情,

  • 判断是什么方法?
  • 请求的地址url是啥(要做什么事)?
  • 传了哪些参数给后端,怎么处理?

我们在serverHandle方法里来处理这几个事情,

可以看到,拿到请求后我们把请求的信息都拿到了,请求的方式(get/post),请求的地址(req.url),请求的参数(req.query/req.body)。 接下来我们要处理这些信息。

userRouterHandle

这里把数据初始化后直接调用了userRouterHanle方法,为什么要用这个方法?因为在用户信息这个模块中有很多功能接口要处理,注册、登录、查询...等等。我们把用户相关的所有请求都给userRouterHanle去处理,同理,其他模块也有各自的handle方法,比如商品信息我们可以自己封装goodsRouterHandle....

这个层级就叫Router层,专门用来处理解析前端传递的请求。

在router里对请求进行分类,来执行不同的逻辑。

Controller

我们对接口进行分类之后,就要走相关的处理逻辑了。

例如当前需要注册:我们的逻辑是:

  • 拿到用户的注册的用户名和密码,对用户输入的信息进行格式校验

  • 去数据库查询有没有已经存在的用户

  • 已经存在返回让前端重新注册,不存在就创建一个新用户

  • 返回数据的格式

  • .....其它逻辑处理

流程如下:

Service

业务逻辑处理完了,我们需要操作数据库了,还是拿注册来说,需要:

  • 查询是否存在
  • 存在,不让注册返回 / 不存在,在数据库新建用户

注册成功后需要登录:

  • 查询是否存在
  • 存在,检验后登录 / 不存在,返回信息

可以看到我们不同的逻辑对数据库有相同的操作,所以我们再次封装一下,把对数据库所有的操作都封装成一个Service层,里面提供的方法专门来操作数据库。

流程图变为:

总结

到此 我们后端架构的分层就很清晰了,大体上分为Router层、Controller层、和Srevice层。 接下来我们的业务就可以根据这个来开展了。。。

文中还没涉及静态文件处理以及数据格式封装、数据格式校验等等模块...

源码里有部分涉及,感兴趣的可以看看:源码地址

相关推荐
Q_Q5110082851 天前
python+django/flask+vue的大健康养老公寓管理系统
spring boot·python·django·flask·node.js
老前端的功夫1 天前
移动端兼容性深度解析:从像素到交互的全方位解决方案
前端·前端框架·node.js·交互·css3
Q_Q19632884751 天前
python+django/flask+vue的多媒体素材管理系统
spring boot·python·django·flask·node.js·php
Q_Q5110082851 天前
python+django/flask+vue的基于疫情防控管理系统的数据可视化分析系统
spring boot·python·django·flask·node.js
前端fighter1 天前
全栈项目:闲置二手交易系统(二)
前端·vue.js·node.js
克里斯蒂亚诺更新1 天前
登录接口思路和开发
node.js
Q_Q5110082851 天前
python+django/flask医药垃圾分类管理系统
spring boot·python·django·flask·node.js·php
韩立学长1 天前
【开题答辩实录分享】以《基于Vue Node.js的露营场地管理系统的设计与实现》为例进行选题答辩实录分享
数据库·vue.js·node.js
Q_Q5110082852 天前
python+django/flask创新型产品提前购系统
spring boot·python·django·flask·node.js·php
Q_Q19632884752 天前
python+django/flask+vue的基于协同过滤算法的体育商品推荐系统
spring boot·python·django·flask·node.js·php