1.koa2 安装 node mysql 和 redis 安装方面就不介绍了,建议百度 主要讲 安装以及里面一些项目的文件呀,而后可让小伙伴们基本了解koa2开发后台,但愿你们能够学到后台开发到思想。建议观看前能够去github
上先下载源码而后进行食用,效果更加((QQ群技术讨论)838293023备注(github进来的前端
// 安装 koa 保证node 版本 8以上mysql
npm install -g koa
nginx
// 安装脚手架git
npm install -g koa-generator
github
// project 项目名称redis
koa2 project
sql
cd project
// 安装依赖数据库
npm install
express
// 安装当前 环境变量
npm install cross-env -D
// 安装mysql 和 redis session (nodemon 内置了因此不须要安装)
npm install koa-generic-session mysql redis --save
// 修改package.json dev NODE_ENV=dev
"dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
koa的路由不是内置在里面的 咱们须要添加 koa-router
插件 没有能够下载一下npm i koa-router --save
咱们先引入 koa-router
而后直接执行 咱们主要介绍 get
和 post
回调值,这有一个async
这个是es7的解决异步的方法(重点) ctx
就是把咱们的request
和response
合起来 并加了本身的一些方法,next
执行后就会继续执行 ,这边咱们看到有一个ctx.body = xxx 的方式这个是回调咱们前端数据方式 和 express
的res.json()
是同样的。
app.js
里面
koa-json
和
koa-bodyparser
这个是咱们用来接受前端数据而后进行处理的一个依赖
app.use()
)咱们的依赖后咱们就能够在咱们的router 里面获取到前端传的数据了
// get 获取
const {author:author="",keyword:keyword=""} = context.query;
复制代码
// post 获取
const {author:author="",keyword:keyword=""} = context.request.body;
复制代码
获取到数据咱们就能够进行下一步了
这里咱们添加了一个对用户没有登陆的一个拦截 loginCheck.js
const {ErrorModel} = require('../model/resModel');
module.exports = async (context,next)=>{
if (context.session.username) {
await next()
return
}
context.body = new ErrorModel('用户暂未登陆')
}
复制代码
使用方式
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
const {REDIS_CONF} = require('./conf/db')
// session 配置 要进行一个防止 csrf 的攻击
// 进行一个加密 “私密” 咱们的cookie 或者 session 若是被别人拿到就会有风险 因此进行一个加密
// 相对于密码咱们也会进行一个加密 就算是库被别人扒了别人也不会知道密码是什么
app.keys = ['Jin_jin#!']
app.use(session({
// 配置cookie
cookie: {
path: '/', // 路由均可以操做 默认是调用都哪一个路由
httpOnly: true, // 只有服务器能够操做
maxAge: 24*60*60*1000 // 时间
},
store: redisStore({ // 进行一个 redis 的获取和赋值
all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
})
}))
复制代码
配置好以后咱们就能够直接使用 context.session
来获取和设置 session
和 redis
下面代码 escape 和 where 1=1 都是很是实用的小技巧 escape是为了别人经过输入的数据进行对数据库的一个特殊的操做的进行防护的功能 好比别人输入userName = ' -- 而后对数据库进行一些操做 因此咱们在写这些sql 的时候都要考虑更多一点
## blog controller
const {exec} = require('../db/mysql')
const getList = async (author,keyword)=>{
// 先返回假数据(格式正确) where 1=1 是一个小技巧
let sql = `select * from blog where 1=1`;
if (author) {
sql += ` and author='${author}'`
}
if (keyword) {
sql += ` and title like '%${keyword}%'`
}
sql += ` order by createtime desc`;
// 返回一个promise
return await exec(sql)
}
复制代码
## user controller
const {exec,escape} = require('../db/mysql')
const {genPassword} = require('../utils/cryp')
const login = async (userName,password)=>{
userName = escape(userName);
password = genPassword(password)
password = escape(password);
let sql = `select user_name,realname from users where user_name=${userName} and password=${password}`;
const userData = await exec(sql);
return userData[0]||{}
}
module.exports = {
login
}
复制代码
使用
咱们对返回前端时候对数据进行一次处理 返回前端的就是一个实例,
class BaseModel {
constructor(data,message){
if(typeof data === 'string'){
this.message = data;
data = null;
message = null;
}
if(data){
this.data = data;
}
if(message){
this.message = message;
}
}
}
class SuccessModel extends BaseModel{
constructor(data,message){
super(data,message);
this.errno = 0
}
}
class ErrorModel extends BaseModel{
constructor(data,message){
super(data,message);
this.errno = -1
}
}
module.exports = {
SuccessModel,
ErrorModel
}
复制代码
// 添加conf 文件夹 里面添加 db.js 管理当前 当前mysql 的配置 以及 redis 的配置
const env = process.env.NODE_ENV;
let MYSQL_CONF;
let REDIS_CONF;
if (env === 'dev') {
MYSQL_CONF = {
host: 'xx.xx.xx.xx',
user: 'xx',
password: 'xx',
port: '3306',
database: 'newTable'
}
REDIS_CONF = {
host: '127.0.0.1',
port: '6379'
}
}
if (env === 'production') {
MYSQL_CONF = {
host: 'xx.xx.xx.xx',
user: 'xx',
password: 'xx',
port: '3306',
database: 'newTable'
}
REDIS_CONF = {
host: '127.0.0.1',
port: '6379'
}
}
module.exports = {
MYSQL_CONF,
REDIS_CONF
}
复制代码
// 添加db文件夹,咱们添加一个mysql模块的一个文件,来管理咱们的链接数据库
const mysql = require('mysql');
const {MYSQL_CONF} = require('../conf/db');
// 建立 连接对象
const con = mysql.createConnection({
...MYSQL_CONF
});
// 开始连接
con.connect();
// 添加执行 sql 函数
function exec(sql) {
return new Promise((resolve,reject)=>{
con.query(sql,(err,result)=>{
if (err) {
reject(err);
return
}
resolve(result)
})
})
}
module.exports = {
exec,
escape: mysql.escape
}
复制代码
能看到最后🙏谢谢你们了,多多点赞在github 上面对❤️是对我最好对鼓励,我会尽可能分享一些本身使用得心得以及正确对食用方式
可能如今小伙伴仍是不懂。。俗话说;师傅领进门,修行在我的。代码上的备注写的也够多了。仍是不懂的能够加群问问小伙伴们,
求靠谱内推(北京地区)能够留言我 +。=