开发轻量级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
    └── ...

关于作者


创建和维护由

原文链接:https://www.cnblogs.com/zy-mg/p/17293391.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:开发轻量级REST API样板 基于Node.js、MongoDB 通过Mongoose驱动 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • JavaScript中英文字符长度统计方法示例【按照中文占2个字符】

    当统计JavaScript字符串长度时,需要注意中文和英文字符的不同处理方式,因为中文字符在Unicode编码中占两个字符的位置,而英文字符只占一个字符位置。 下面介绍几种方法来实现JavaScript中英文字符长度的统计。 方法一:正则表达式 使用正则表达式对中英文字符进行匹配,累加中文字符的个数,即可得到该字符串的长度。 function length(…

    JavaScript 2023年5月28日
    00
  • 激活 ActiveX 控件

    激活 ActiveX 控件是通过在 HTML 页面使用OBJECT标签来实现的。下面是激活ActiveX 控件的完整攻略: 第一步:编写 OBJECT 标签 在 HTML 页面中使用 OBJECT 标签来激活 ActiveX 控件 <object id="控件ID" classid="clsid:控件ClassID&quo…

    JavaScript 2023年6月10日
    00
  • JavaScript优雅处理对象的6种方法

    JavaScript优雅处理对象的6种方法 在 JavaScript 开发中,绝大部分情况下数据都会以对象的形式存在,因此如何优雅处理对象是我们非常重要的一项技能。在下面的内容中,我们将介绍处理对象的6种优雅方法。 1. 使用解构赋值 在 JavaScript 中,我们可以使用解构赋值的方法来方便地提取对象中的属性值。这种方法可以让代码更加简洁易读,同时也可…

    JavaScript 2023年5月27日
    00
  • JavaScript包装对象使用详解

    JavaScript包装对象使用详解 在JavaScript中,有三种基本数据类型:字符串、数字和布尔值。但是在实际开发中,我们通常需要使用更复杂的数据类型,这时就需要使用JavaScript的包装对象。 什么是JavaScript包装对象 JavaScript提供了三种基本类型的包装对象:String、Number和Boolean。当我们在基本类型上调用一…

    JavaScript 2023年5月27日
    00
  • JavaScript html5利用FileReader实现上传功能

    这里提供一个简单的JavaScript HTML5利用FileReader实现上传文件的攻略。 前言 很多时候我们需要上传文件到服务器。HTML5中提供了<input type=”file”>标签来实现文件上传。但是这种方法有一个限制:无法对文件进行预览或处理。为了解决这个问题,我们可以使用FileReader API。FileReader AP…

    JavaScript 2023年5月27日
    00
  • AngularJS中使用HTML5手机摄像头拍照

    AngularJS中使用HTML5手机摄像头拍照的完整攻略如下: HTML5摄像头API简介 HTML5提供了访问设备摄像头的API,这个API是Navigator.getUserMedia(),它用于打开摄像头,并且访问摄像头捕获的视频流。 实现步骤 获取用户摄像头的许可 创建一个video元素 将摄像头捕获的视频流绑定到video元素上 创建一个Canv…

    JavaScript 2023年6月11日
    00
  • JavaScript运行过程中的“预编译阶段”和“执行阶段”

    JavaScript代码的运行分为两个阶段:预编译阶段和执行阶段。在预编译阶段,JavaScript引擎会进行一些预处理操作,包括变量声明、函数声明、变量提升等。执行阶段则是按照预处理结果进行实际代码的执行。 预编译阶段 变量声明 在预编译阶段,JavaScript引擎会将代码中所有的变量声明存储到作用域中。例如: console.log(a); // un…

    JavaScript 2023年5月27日
    00
  • 关于Javascript闭包与应用的详解

    关于JavaScript闭包与应用的详解 什么是闭包 简单来讲,闭包就是函数和函数所持有的变量的组合体。当一个函数内部定义了另一个函数,并将这个内部函数返回时,包含这个内部函数及其所引用的变量的部分一起称为闭包。 function outerFunction() { let outerVariable = ‘I am outer!’; function in…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部