mysql function_Koa2 amp; mySQL amp; PM2 搭建后端服务
噓!啰嗦一句話。
作為一名前端開發工程師,我們平常和后端接觸最多的就是接口的對接。那么后端同事是怎么寫一個接口來給到我們前端的同學去獲取數據庫數據并做一些花里胡哨的功能呢?今天我們就用Koa2 & mySql來搭建一個后端服務器,實現自己寫api的中國夢!前言
對于部分前端開發的小伙伴來說,后端開發可能是一個陌生的領域,畢竟現在前端的工作繁重(我哪有時間去學習后端開發鴨!)。幸好有了Node.js這個利器,讓我們可以在現有的前端技能基礎上去實現一些后端的技術,這也降低了我們入門后端開發的門檻。
今天給大家介紹的這個小可(dong)愛(xi)就是我通過最近一個項目(這個項目是由koa2+mysql + pm2作為后端服務)中抽離出來的一套Koa2 & MySQL & PM2基礎模板。目的就是讓我們的前端小伙伴可以直接使用它去開發接口,實現自己的夢想。
教程目前考慮在windows環境下使用pm2來啟動服務,且已dev環境進行測試
目標
通過這一套基礎模板,快速開發api,實現前端后端自我完成。也就是說,你把代碼克隆下來之后,以學習為目的的話,你只需要開始寫api就行了,一些簡單的配置我都配置好了,你只要按照以下步驟去操作,便可以自己寫api,自己對接接口,然后就自己懟自己了。
使用技術
Koa2
MySql(請確保你的windows已經安裝了mysql,并且可以正常啟動mysql)
PM2 (請確保你的windows已經安裝了PM2,并且可以正常啟動PM2)
軟件安裝教程
MySql安裝:
安裝wamp或者phpstudy這兩個神器就會自動幫你安裝MySql,基本上就滿足你的學習開發了,如果你是要在生產環境使用的話,我相信你的環境已經具備所需的軟件了
PM2安裝:
上面PM2教程是我上一次寫的一篇文章(寫的有點爛,我都看不下去了,哈哈,不過pm2的安裝非常的容易,大家可以看看,再不然也可以百度找一下相關完整的教程)
代碼結構
環境配置
使用這一套Koa2 & MySQL & PM2基礎模板之前,你需要確保你的電腦安裝了node、mysql、PM2?
創建數據庫
代碼文件中我提供了mysql建表的sql語句,你需要在你的電腦中先創建一個名為dev_db的數據庫,創建之后執行代碼文件中的dev_db.sql文件即可
代碼安裝
npm i //就這樣子,先把node繁重的node_module安裝下來,嘿嘿//如果npm不行,那就試一下 cnpm i啟動服務
使用pm2 start pm2.config.js --only dev?來啟動koa2項目,當出現下面截圖一樣內容的時候,證明你的koa2項目已經正確啟動了。
這個時候你可以使用http://localhost:3200進行訪問項目(關于3200端口配置,我會在下面進行解釋)
配置說明
項目的主要運行流程為:通過pm2 start pm2.config.js --only dev/prod/test啟動項目之后(也可以使用npm run dev/prod/test),koa2會通過當前啟動的環境來配置不同的config參數(app.js引入配置文件),從而使用不同的端口以及mysql參數配置(配置在config文件夾中,下面詳細說)
app.js配置引入
const Koa = require('koa')const app = new Koa() const env = process.env.NODE_ENV;const config = require('./config')const router = require('./app/router').../*更多的配置可以拉取倉庫代碼進行查看*/啟動環境配置
PM2配置:pm2.config.js
let startFile = "./app.js"module.exports = { apps: [{ name: "prod", script: startFile, env: { "NODE_ENV": "production" } }, { // 測試環境 name: "test", script: startFile, env: { "NODE_ENV": "test" } }, { // 開發環境 name: "dev", script: startFile, env: { "NODE_ENV": "development" } } ]}環境參數配置:/conf/config.*.js/*conf.dev.js*/const conf = { port: 3200, //啟動端口 ,這個根據你電腦環境的實際情況來配置 base_url: '',// 當前api服務器的域名 mysql: { // mysql數據庫信息 host: 'localhost', port: '3306', database: 'dev_db', //你可以修改你的數據庫名字 user: 'root', //數據庫登錄賬戶 你寄己來 password: '', //數據庫登錄密碼 我就不知道你的是啥啦 charset: 'UTF8mb4' }}module.exports = conf;通過配置不同的config后,當我們通過pm2 start pm2.config.js --only dev/prod/test,koa會根據我們在pm2.config.js中配置的NODE_ENV來確定當前是什么運行環境,并通過/config/index.js中來使用不同的配置端口以及參數
數據庫配置
配置文件路徑:/db/mysql.jsconst db = require("mysql");const config = require('../config').mysql;const client = function () {}var pool = db.createPool({ host: config.host, port: config.port, user: config.user, password: config.password, database: config.database, charset: 'UTF8mb4'});路由配置
路由配置:/router/index.js/*router/index.js*/const router = require('koa-router')()let app = require('./v1.js')//接口映射router.use('/api/app', app.routes(), app.allowedMethods())// vue history 設置router.get('*', async(ctx, next)=>{ return await ctx.render('index', {})})//返回注冊路由module.exports = router數據庫模型(Model)創建
Model主要是告訴sequelize如何映射數據庫表。
sequelize.define(modelName, attributes, [options]) -> Modal這個實例方法用于定義一個新的model(模型)。model相當于數據庫中的表,該對象不能通過構造函數實例化,而只能通過sequelize.define()或者sequelize.import()方法創建
第二個參數是指定列名和數據類型,如果是主鍵,需要更加詳細的指定。第三個參數是額外的配置
具體的sequelize配置以使用可以參考中文文檔進行學習
//eg:/*models\sequelize-model\test.js*/module.exports = function(sequelize, DataTypes) { return sequelize.define('test', { id: { type: DataTypes.INTEGER(11).UNSIGNED, allowNull: false, primaryKey: true, autoIncrement: true }, nick_name: { type: DataTypes.INTEGER(11), allowNull: false }, }, { tableName: 'test', timestamps: false });};在Model中寫的代碼其實就是和我們在mysql中編寫的表結構一樣的,只不過是通過不同的語言來進行表達而已,也就是你如果在mysql中新增表或者字段,那么你也需要在相對應的model中去更新相關的字段。也有插件(中間件)可以自動映射數據庫表結構到模型中,但是第一次使用發現有點小問題,所以我就沒使用了。
/*mysql 創建表結構*/CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `nick_name` VARCHAR(50) NULL DEFAULT '', PRIMARY KEY (`id`))COLLATE='utf8mb4_general_ci'ENGINE=MyISAMAUTO_INCREMENT=5;寫接口啦!
接口編寫完成,當我們訪問接口的時候會在?/router/v1中找到對應的路由名字,接著訪問我們對應的控制器接口地址,進行業務的處理
router/v1統一包裝接口映射/*router/v1*///業務接口const router = require('koa-router')()// 引入不同控制器接口文件// 根據不同的業務模塊我們可以創建不同的controller,我們可以把相同模塊的接口寫在相同的controller中,并通過此處進行引入,例如 test1const test = require('../controller/test')const test1 = require('../controller/test1') const test2 = require('../controller/test2') //接口映射//接口訪問地址http://localhost:port/api/app/test///api/app這一段已經在index.js中配置了前綴,所以在寫接口的時候需要加上api/app///controllerrouter.post('/test',test.getTest)router.post('/createData',test.createData)//controller1router.post('/test1',test1.getTest)//controller和service分離部分router.post('/test2',test2.getTest)module.exports = router控制器:controller/*.js/*controller/test.js*/const models = require('../models')const { joi, validateParams} = require('../base/controller.js')module.exports = { //獲取數據庫數據 async getTest(ctx){ let data = { tip: '你安裝了數據庫就可以把上面注釋打開' } return ctx.output({data:data},'獲取成功',0) }, async createData(ctx){ //參數驗證 //通過獲取post傳遞過來的參數 //再使用模型把數據插入數據庫 const schema = joi.object().keys({ nick_name: joi.string().required() }) validateParams(ctx.input, schema) let nick_name = ctx.input.nick_name let parmas = { nick_name: nick_name } let res = await models.test.create(parmas) if(res){ return ctx.output({},'添加成功',0) } // let data = { // tip: '你安裝了數據庫就可以把上面注釋打開' // } // return ctx.output({data:data},'獲取成功',0) }}截止目前,通過上面的一系列配置以及代碼的cv之后,我們就可以通過postman來測試接口是否成功啦!
控制器controller和service層分離
當我們業務比較復雜的時候,我們并不希望處理數據庫的邏輯和我們的普通業務邏輯放在一起,這個時候我們可以把處理數據庫的操作分離出來放在一個service層,然后控制器controller就只是處理我們的業務邏輯
具體操作:通過新增service文件夾,再從文件夾中新建不同的service模塊文件,例如serviceTest2.js,同時把test2中和數據庫操作相關的操作抽離到serviceTest2.js中,這樣子我們就可以清晰知道我們各個業務層所做的事情,也方便我們進行維護。
/*app\controller\test2.js*///這個文件演示 控制器和service層分離const serviceTest = require('../service/v1/serviceTest2.js')module.exports = { //獲取數據庫數據 async getTest(ctx){ let res = await serviceTest.getTest() return ctx.output({data:res},'獲取成功',0) }}/*app\service\v1\serviceTest2.js*/const models = require('../../models')module.exports = { //獲取數據庫數據 async getTest(ctx){ let res = await models.test.findOne({ where: { id: 1 } }) let data = { name: res.dataValues.nick_name } // let data = { // tip: '這里從控制器抽離出來的操作數據庫的東西,你如果安裝了mysql,可以打開上面的注釋' // } return data }}PM2更多操作
pm2 restart pm2.config.js --only dev/prop/test //重啟服務pm2 log // 查看日志pm2 kill //殺死進程#官方文檔:https://pm2.keymetrics.io/docs/usage/quick-start/寫在最后
以上文章便是我在這兩天在一個koa2項目中抽離出來的一套代碼模板,大家只要把代碼克隆下來并保證電腦上已經安裝了所需軟件,并可以進行koa2項目的啟動和編寫api了。
這是一篇入門級別的簡單分享文章,如有哪里有錯誤,希望您可以幫忙提出糾正,非常感謝。
如果你覺得還可以的話,希望您可以給我一個星星哦,十分感謝
因為公眾號文章不能跳轉外鏈,你可以點擊去到我的文章原地址哦~
總結
以上是生活随笔為你收集整理的mysql function_Koa2 amp; mySQL amp; PM2 搭建后端服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bootsrap 外边距_Bootstr
- 下一篇: mysql添加分区健_MySQL添加分区