开发轻量级REST API样板 基于Node.js、MongoDB 通过Mongoose驱动
ZY.Node.Mongodb
项目介绍
基于 Node.js、Express.js 和 MongoDB 通过Mongoose驱动进行 REST API 开发的轻量级样板。
集成了Swagger UI、JWT、session、发送邮箱验证、日志管理、统一的预定义状态码响应格式等,对于为前端平台构建纯净的Web API非常有用。该项目我尝试做出轻松维护代码结构的项目样板,因为任何初学者也可以采用该流程并开始构建API。
项目开放,可以提出建议、错误的issues。
项目特点
- 轻量级Node.js项目提供Restful API
- 数据库采用 Mongodb, 通过Mongoose驱动。
- CRUD操作示例
- 跨域处理
- 日志管理
- 具有恰当的状态代码的预定义响应结构
- 全局错误处理
- 增加express-validator请求参数校验
- jwt验证 用户权限中间件分离
- 基本身份验证(采用bcrypt单向Hash加密算法加密密码进行注册/登录)
- Token生成和校验请求头的authorization
- 集成swagger-ui
- 增加邮件验证码通知
- session 验证码校验
- 采用jest 接口单元测试
如何获得并运行项目:
首先确保您系统中安装了Mongodb,和Nodejs,一起准备完善之后。按照如下操作。
有的同学启动会报错可能是依赖包的版本问题需要注意
我的环境配置供参考
- Node.js 14.18.1+
- MongoDB 5.1+
1,clone代码
git clone https://gitee.com/Z568_568/node.mongodb.git
2,安装依赖
npm install
3,启动程序
开发环境:npm run dev 基于 nodemon 热更新
生产环境:npm run start
4,启动成功示例

如何增加新的model
只需在 /models/v1/mapping/ 中创建一个新文件,
然后在控制器/controllers/v1/中创建一个对应新模型的新控制器的并使用。
如何增加新的路由router
只需在 /routes/v1/ 中创建一个新文件,并且引入它对应的controllers进行使用,routes下面的文件 将被 mount-routes插件自动解析并以文件名作为api根路径,
开发环境下会打印在终端上:

如何增加新的控制器
只需在 /controllers/v1/ 中创建一个新文件即可,并且引入相关模型进行使用
如何理解内置的登录注册逻辑
/*
* TODO: 注册登录大概逻辑:
* 1.用户注册 - 用户信息入库 - 发送验证码 - 校验验证码
* |
* 验证码发送失败、验证码失效或者校验失败 - 重新发送或输入验证码 - 校验验证码
* *
* 2.用户登录 -(账号、密码、验证状态都校验通过)- 发Token
* |
* 验证状态不通过 - 重新校验验证码/重发验证码 - 校验验证码 - 发Token
* */
项目结构
.
├── app.js //入口文件
├── package.json //依赖配置文件
├── .env.development //开发环境配置
├── .env.production //生产环境配置
├── config //项目配置
│ ├── db.config.js
│ ├── swagger.config.js
│ └── ...
├── controllers //控制模块(业务处理)
│ └── v1
│ ├── UserController.js
│ └── ...
├── models //模型模块(建表)
│ └── v1
│ ├── user.test.js /模型统一导出
│ └── mapping
│ ├──UserModel.js
│ └── ...
├── routes //路由(配置实际API地址路径)
│ └── v1
│ ├── user.test.js
│ ├── user.js
│ └── ...
├── db //mongodb数据库连接
│ ├── user.test.js
│ └── ...
├── middlewares //中间件
│ ├── jwt.js
│ ├── permissions.js
│ ├── session.js
│ └── ...
├── logs //日志
│ ├── info.log
│ ├── error.log
│ └── ...
└── utils //辅助工具
├── utils.apiResponse.js
├── utils.mailer.js.js
└── ...
关于作者
创建和维护由
- @ZY_GITEE
- @ZY_GITHUB
- 想咨询其他或合作请发我邮箱1840354092@qq.com
- 到我主页留言http://www.zhouyi.run
- 我的博客站点http://blog.zhouyi.run
开发轻量级REST API样板 基于Node.js、MongoDB 通过Mongoose驱动的更多相关文章
- KoaHub平台基于Node.js开发的Koa 连接支付宝插件代码信息详情
KoaHub平台基于Node.js开发的Koa 链接支付宝插件代码信息详情 easy-alipay alipay payment & notification APIs easy-alipay ...
- 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具
认识Web.桌面和移动app新开发模式 - 基于Node.js环境和VS Code工具 一.开发环境的搭建(基于win10) 1.安装node.js和npm 到node.js官网下载安装包(包含npm ...
- 基于node.js 的 websocket的移动端H5直播开发
这一篇介绍一下基于node.js 的 websocket的移动端H5直播开发, 下载文章底部的源码,我是用vscode打开, 首先在第一个终端运行 npm run http-server 这个指令是运 ...
- koa : Express出品的下一代基于Node.js的web框架
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...
- 基于node.js人脸识别之人脸对比
基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- NodeBB – 基于 Node.js 的开源论坛系统
NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...
- 基于 Node.js 平台,快速、开放、极简的 web 开发框架。
资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
- 基于Node.js + jade + Mongoose 模仿gokk.tv
原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 关于gokk 大学的娱乐活动基本就是在寝室看电影了→_→,一般都会选择去goxiazai.cc上看,里面的资源多,质量高 ...
随机推荐
- 上分之路 VP Codeforces Round #744 (Div. 3) ABDE
VP情况 4 / 8 AC: A,B,D,E1 60 minutes WA: C 4 127 +00:02 +00:28 -7 +00:58 +00:39 手速还在线 D pair排个 ...
- cuda安装的问题
小学期老师给的文档,里面要加入这几个环境变量 他这排版有问题,我就去网上找了几个cuda环境变量的配置 保姆级的CUDA的下载安装使用,详细的环境变量配置,不仅仅让你能够安装,还会教你弄懂为什么要这样 ...
- centos7.6镜像
centos7.6镜像 https://archive.kernel.org/centos-vault/7.6.1810/isos/x86_64/
- 第十二组 -摩天脆脆冰淇淋队-第四次团队作业:Git实战
这个作业属于哪个课程 至诚软工实践F班 - 福州大学至诚学院 - 班级博客 - 博客园 (cnblogs.com) 这个作业要求在哪里 第四次团队作业:Git实战 - 作业 - 至诚软工实践F班 - ...
- Matlab %叁
###本章内容十分多 第三章:Variables and Data access Data Types numeric:double.single.int8(16.32.64bit[integer]) ...
- samba缓存问题
samba 在第一次登录时,会在windows上缓存着登录密码,当你重新修改samba服务端的密码, 再次登录时,windows会自动用缓存的旧密码登录,导致的登录失败.
- UIPath踩坑记一UIpath中抓取数据后在tableau中无表头
UIpath抓取数据存在Excel中(Excel 应用程序范围),且已设置表头,但是放到tableau中无表头 更换为"写入范围(工作簿)",同时属性设置必须勾选"添加标 ...
- linux : root 密码忘记,解决办法
1.重启 2.在启动选择系统内核界面,按e键进入单用户模式 3.找到linux16(或者linux) 开头行,删除ro,并且在ro处添加 rw init=/sysroot/bin/sh 4.按 ctr ...
- 记:crontab定时器读取env信息不全
背景: 有这样一段代码,有两种执行方式: crontab定时器.手动执行 #!bin.bash echo $redispasswd 你猜,结果一样不? 1.手动执行 2.crontab定时器 创建 ...
- adb shell monkey
monkey 在模拟器或真机里在,.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),打开app 查看包名 adb shell dumpsys window windows | f ...