一、初始化Koa2框架
1.运用脚手架初始化Koa2框架
npm install -g koa-generator -g //全局安装koa-generator命令
2.使用koa-generator生成koa2项目
koa2 project(项目名称)
3.项目初始化
cd project(项目名称)
npm install
自此,我们的项目就成了下面这个亚子
我们需要对其改造成我们想要的样子,和express框架一样
config 配置文件
controllers 项目控制器存放目录:接受请求,处理逻辑
dbhelper 数据库CRUD操作的封装
log 日志文件
同时把public文件夹和routes文件夹以及views文件夹删掉,因为是纯前后台分离项目,所以在app.js里面也将相关内容删掉。
二、在koa2框架中导入MySQL数据库
MySQL数据库的安装和配置我就不说了
https://www.cnblogs.com/xch-yang/p/7661069.html
在config文件夹里新建Database.js文件同时将它暴露出来( 使用连接池增加效率)
const mysql = require("mysql");
let config = mysql.createPool({
host: "127.0.0.1", // 数据库的地址
user: "root", // 数据库用户名
password: "root", // 数据库密码
port: "3306", // mysql数据库的端口号
database: "personal_blog" // 使用那个数据库
})
// 这里也可以像mongodb一样写返回参数,各种连接不成功的
console.log("数据库连接成功");
config.on('release', function (connection) {
console.log('Connection %d released', connection.threadId);
});
module.exports = config;
在dbhelper文件夹里新建db.js文件作为封装数据库操作代码
以下是我用Promise封装的一些关于MySQL数据库增删改查的一些常用操作,关于SQL语句更多的操作网上有很多,直接替换就好,这儿不多说
const config = require('../config/Database');
// sql查询表中数据总条:SELECT COUNT(*) FROM 表名称。
// 返回大于 20 岁的人数:
// SELECT COUNT(*) AS count FROM Personsinfo WHERE Age>20
// 增
exports.add = function (addSqlParams) {
let addSql = 'INSERT INTO user(user_name,user_cloudId,user_qqNumber) VALUES(?,?,?)';
return new Promise(function (resolve, reject) {
config.query(addSql, addSqlParams, function (err, result) {
resolve(result);
if (err) {
console.log(err);
reject(err.message);
}
console.log('INSERT ID:', result);
});
});
}
// 删
exports.delete = function (conditions) {
let delSql = 'DELETE FROM ychat_user where ' + conditions;
return new Promise(function (resolve, reject) {
config.query(delSql, function (err, result) {
resolve(result);
if (err) {
reject(err.message);
}
console.log('DELETE affectedRows', result.affectedRows);
});
});
}
// 改
exports.set = function (data, conditions) {
let modSql = 'UPDATE ychat_user SET ' + data + ' WHERE ' + conditions;
return new Promise(function (resolve, reject) {
config.query(modSql, function (err, result) {
resolve(result);
if (err) {
console.log(err);
reject(err.message);
}
console.log('UPDATE affectedRows', result.affectedRows);
});
});
}
// 查
exports.select = function (parmas) {
let sql = 'select * from ychat_user where ' + "user_id=" + "'" + parmas + "'" + " or " + "mobile=" + "'" + parmas + "'";
return new Promise(function (resolve, reject) {
config.query(sql, function (err, result) {
resolve(result);
if (err) {
reject(err.message);
}
});
});
}
在controllers文件夹里新建control.js文件作为封装逻辑操作代码
下面是我关于逻辑操作的一些代码
const DB = require("../dbhelper/db.js");
exports.doLogin = async (ctx, next) => {
let code = ctx.request.body.code;
let addparams = ['adwsd', 3, 2]
let result = DB.add(addparams);
console.log(result)
ctx.response.body = {
list: '',
state: '测试成功',
code: '0'
}
}
在主文件目录下新建router.js文件当作路由中间件,这样我们可以将接口看的更加直观
/**
* 前端路由表
*/
const router = require('koa-router')()
const control= require('./controllers/control.js');
const high = require('./controllers/High')
router.get('/doLogin', control.doLogin);
// 测试高并发接口·
router.get('/high', high.high);
module.exports = router.routes();
同时在app.js的最后插入
let route = require('./router')
app.use(route);
作为中间件