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
└── ...

关于作者


创建和维护由

最新文章

  1. geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)
  2. HTML5可视化编辑与微数据
  3. Spring @AspectJ 实现AOP 入门例子(转)
  4. Android-NDK编译:cocos2d-x(二)
  5. iOS的一些坑
  6. android通过httpClient请求获取JSON数据并且解析
  7. hdu 1518 深搜
  8. CentOS使用sudo提示用户不在sudoers文件中的解决方法
  9. 19个非常有用的 jQuery 图片滑动插件和教程
  10. ubuntu下发布asp.net core并用nginx代理之旅(续)
  11. Lodop 动态加载模板,动态加载数据
  12. List实现
  13. vue-父子组件嵌套的示例
  14. BZOJ 2178: 圆的面积并 [辛普森积分 区间并]
  15. UOJ #11. 【UTR #1】ydc的大树
  16. Maven替换为国内仓库
  17. SQL查询无限层级结构的所有下级,所有上级
  18. maven配置多仓库的方法
  19. 查找->动态查找表->二叉排序树
  20. 解决依赖的moduleBuildConfig.DEBUG总是未false的问题

热门文章

  1. git 报错 incorrect username or password
  2. mysql的隔离级别以及存储引擎
  3. Django框架搭建web项目(一)
  4. Thread的状态变更
  5. Java mysql批量关联插入数据
  6. 跨域获取iframe页面的url
  7. HTTPS的实现原理 ---- 核心 SSL/TLS协议
  8. RKO队——冲刺随笔(4)
  9. nohup /root/runoob.sh > runoob.log 2>&1 &
  10. BLE目录