搭建一个Koa后端项目脚手架的方法步骤(5)

代码中的链接部分一看基本就明白了,可是 models 部分怎么看不出所以然。其实是模块化开发的一部分,这里是为了整合models文件下的其他js文件,方便开发者使用,不用每写一个文件就要进行引入和导出。

初始情况下, models 引入只需 mongoose.model('名称', schema); 并将其暴露出去,即可对数据库进行操作。

fs.readdirSync(__dirname) .filter(function (file) { return (file.indexOf(".") !== 0) && (file !== "index.js"); }).forEach(function (file) { var modelFile = require(path.join(__dirname, file)); var schema = new mongoose.Schema(modelFile.schema); db.models[modelFile.name] = mongo.model(modelFile.name, schema, modelFile.name); });

在这个文件内,我们做了这样一件事:读取 models 目录下所有文件名不为 index.js 且以 .js 为后缀名的文件,使用 require 进行引用,并将其整合为一个 schema对象后再引入到models并且暴露出去给操作数据库。这样子做的好处是,在项目越来越庞大以后,如果我们需要添加新的 schema ,只需直接在 models 目录下新建 .js 文件即可,则不用再进行引入的关系操作

由于有了上一步的操作,我们后面直接新增一个schema的配置文件即可。index.js会自动的引入并暴露出model

'use strict' module.exports = { name: "user", schema: { uuid: String, // UUID userName: String, // 用户名 password: String, // 密码 } };

我们使用时可以这样操作,

const User = require('../models/index').getModel('user') const user = await User.findOne({userName: userName})

PM2配置

PM2是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。pm2的官方文档已经进行详细的配置说明,在这里就不进行一一简述,主要讲的时我的koa项目怎样配合PM2进行相关管理或者说部署。PM2常用命令需要用的时候可以进行查看,没必要去背,用多就熟悉了。也可以结合在package.json里面,用自定义命令运行。我们在 package.json 的 script 配置和初始化文件 ecosystem.config.js 进行了多环境运行的配置,我们可以根据需要进行切换环境。

package.json 文件添加如下:

"scripts": { "start": "node ./bin/www", "dev": "pm2 start ecosystem.config.js --env dev", "test": "pm2 start ecosystem.config.js --env test", "pro": "pm2 start ecosystem.config.js --env pro", "logs": "pm2 logs", "stop": "pm2 stop ecosystem.config.js" },

其中的

npm run start: 直接跑www文件,可用于调试
npm run dev: 开发环境
npm run test:测试环境
npm run pro:生产环境
npm run logs: 查看pm2的日志
npm run stop: 停止pm2服务

新增 ecosystem.config.js 文件:

module.exports = { apps : [{ name: 'API', script: './bin/www', // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/ args: 'one two', instances: 1, autorestart: true, watch: true, ignore_watch: [ // 不用监听的文件 'node_modules', 'logs' ], max_memory_restart: '1G', env_pro: { "NODE_ENV": "production", "REMOTE_ADDR": "" }, env_dev: { "NODE_ENV": "development", "REMOTE_ADDR": "" }, env_test: { "NODE_ENV": "test", "REMOTE_ADDR": "" } }] };

这个文件主要是对pm2的基本配置,不用每次都进行配置,直接在文件进行改动即可。我们需要关注的是可以在 env 中,增加我们需要的环境及变量即可,文件中的 watch 属性是可以配置监听文件改动后,自动重启项目,比较好用。如果想忽略某一个文件夹的变动可以 ignore_watch ,更多的配置如果有兴趣的小伙伴可以查看官方文档的文档说明。

路由配置

该目录下存放路由基本配置,有 private 和 public 两个文件,引入路由后,我们对其前缀做了处理, router.prefix('/api') 在每一个请求的时候都需要带上这个前缀,抽出来也是为了服务目录的改变,可以直接更改即可,做了全局的操作。每一个路由都必须暴露出去,这样在app.js文件中使用该中间件。 publicRouter.allowedMethods() 根据 ctx.status 设置 response 响应头

// Routes app.use(publicRouter.routes(), publicRouter.allowedMethods()) app.use(privateRouter.routes(), privateRouter.allowedMethods())

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7184c384eb999d012ea89bab6728701c.html