# node-general-service **Repository Path**: ctzlwzg/node-general-service ## Basic Information - **Project Name**: node-general-service - **Description**: 基于node.js搭建一套通用的服务。 开箱即用,快速开发。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-03-18 - **Last Updated**: 2024-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: Nodejs ## README # node 快速搭建 统一风格的api 接口 ## 项目初始化 ``` npm install ``` ## 数据库初始化 在config文件夹下的config.js文件中修改MySQL数据库的连接配置,创建名称为node_test的数据库, 切换但utils文件夹下,执行init-db.js文件 ``` cd utils node init-db.js ``` 看到 init db ok 证明初始化生成了相应的表 最后切换会上一个目录 ``` cd ../ ``` ## 启动服务 ``` node app.js ``` ## 使用到的相关包 1. koa2 :web框架 2. koa-body:获取body中的数据(POST,PUT请求传值的时候,可解析) 3. koa-cors:支持跨域请求 4. koa-jwt:jwt 解析,校验,过滤中间件 5. jsonwebtoken:创建jwt 6. moment:日期格式化 7. koa-logger:日志打印中间件 8. koa-router:路由管理中间件 9. sequelize:ORM框架 10. mysql2:MySQL驱动 11. mockjs:用于生成模拟数据 ## 文件说明 1. config文件夹:统一管理配置信息 2. logs文件夹:所有请求记录,错误记录日志 3. controllers文件夹:控制层(**约定该文件夹下只能存放文件,不能再创建文件夹,而在里面放文件,原因可到controller.js文件中查看**) 4. middleware文件夹:自定义中间件 1. catchException.js文件:统一异常的处理(service层中也做了异常的处理,并不冲突) 2. result.js文件:统一处理返回json对象的格式 5. models文件夹:每个文件用于描述数据库中表字段的信息(**约定该文件夹下只能存放文件,不能再创建文件夹,而在里面放文件,原因,可到model.js文件中查看**) 6. service文件夹:服务层 7. utils文件夹:一些自定义函数 1. connectDatabase.js文件:用于连接数据库 2. db.js文件:用于统一处理 表的主键的生成策略,表的创建时间,修改时间,版本号字段的自动生成,修改时间自动修改,版本号自动递增。 3. init-db.js文件:用于测试时,初始化数据库使用。 4. mock.js文件:测试时模拟数据 5. resultEnum.js文件:统一管理返回数据的状态与描述信息 6. controller.js:用于统一处理路由 7. model.js:用于自动导入所有的model,便于后期引用 8. log4.js:配置日志保存文件,记录请求,错误信息等 8. app.js文件:项目入口文件 ## 注意事项 1. controllers文件夹 中存放路由相关的文件,其中注意请求方式与请求路径中需要有一个空格。 ```js /* 注意请求方式后面的空格 */ module.exports = { 'GET /user': getUsers, 'GET /user/:id': getUser, 'POST /user': saveUser, 'PUT /user/:id': putUser, 'DELETE /user/:id': delUser }; ``` 2. 以后写接口只需要参照controllers 文件夹中user.js中代码,service文件夹中的user.js代码即可。模拟数据写在utils文件夹中的的mock.js中。 3. 如果需要模拟数据那么只需要注释app.js文件中koa使用jwt中间件的代码即可 ```js app.use(koaJwt({ secret: jwtSecret }).unless({ /* 过滤,不需要校验jwt的接口 */ path: [/^\/oauth\/token/] })) ``` 4. 一定要关注中间件的执行顺序,不同的执行顺序可能就会出现not found的返回结果。app.js文件中有说明result中间件必须写在koajwt中间件之后 5. 注意异步的情况,比如操作数据库的时候,注意函数前面加async,调用方法清前面加await。即使这样也可能会有漏掉的情况,数据库中可以查询出数据,但是请求提早返回了,显示not found,那么一定有地方是异步的没有做同步的处理,建议 有使用next方法的地方都需要加上await,在其函数上加上async。总之一句话,框架不太可能出错,没出现想要的结果很可能是你错了(调试了3天,才出结果,断点都打到源码里面了,一度怀疑过源码是不是有bug,降版本,升版本都试过,最后发现,是自己错了)。