1.koa
2. koa-router 后台会接受到各种请求的url,路由会根据不同的url来使用不同的处理逻辑
3. koa-static 请求img、js、css等文件时,不需要其他逻辑,只需要读取文件
4. koa-session 让无状态的http拥有状态,基于cookie实现的后台保存信息的session
5. koa-ejs 服务端渲染 非侵入式
6. koa-better-body post上传文件时,解析请求体
7. mysql co-mysql 配置数据库
const Koa = require('koa');
let server = new Koa();
server.listen(8080);
const Router = require('koa-router');
let router = new Router();
server.use(router.routes());
//static.js
const static = require('koa-static');
module.exports = function(router,options){
options = options || {};
options.image=options.image||30; //单位是天
options.script=options.script||1;
options.styles=options.styles||30;
options.html=options.html||30;
options.other=options.other||7;
// 给不同文件设置缓存时间
router.all(/((\.jpg)|(\.png)|(\.gif))$/i, static('./static', {
maxage: options.image*86400*1000
}));
router.all(/((\.js)|(\.jsx))$/i, static('./static', {
maxage: options.script*86400*1000
}));
router.all(/(\.css)$/i, static('./static', {
maxage: options.styles*86400*1000
}));
router.all(/((\.html)|(\.htm))$/i, static('./static', {
maxage: options.html*86400*1000
}));
router.all('*', static('./static', {
maxage: options.other*86400*1000
}));
}
//server.js 引用
const static = require('./routers/static');
//在server.use(router.routes());之前绑定
static(router);
//如果不分文件写的话可以直接在server中写入一下代码
server.use(static('./static', {
maxage: 86400*1000,
index: '1.html'//默认根目录加载1.html
}));
//gen_key.js
const fs = require('fs');
const KEY_LEN = 1024;
const KEY_COUNT =2048;
const CHARS='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>?,./;[]{}!@#$%^&*()_+';
let arr = [];
for(let i=0;i<KEY_COUNT.length;i++){
let key = '';
for(let j=0;j<KEY_LEN.length;j++){
key+=CHARS[Math.floor(Math.random()*CHARS.length)]
}
arr.push(key);
}
fs.writeFileSync('.keys',arr.join('\n'));
//server.js
//中间件 session 需要配置key
server.keys = fs.readFileSync('.keys').toString().split('\n'); //读取的是buffer数据 需要toString()
server.use(session({
maxAge:20*60*1000,
renew:true // 自动续期
},server)) // 第二个参数 server 别忘了配置
const ejs=require('koa-ejs');
let server = new Koa();
//渲染
ejs(server, {
root: path.resolve(__dirname, 'template'), // 渲染的根目录
layout: false, //默认布局 false
viewExt: 'ejs', //渲染的文件后缀名
cache: false,
debug: false
});
处理数据使用koa-better-body中间件
处理get数据:ctx.request.query
处理post数据:ctx.request.fields
const body = require('koa-better-body');
const path = require('path');
server.use(body({
uploadDir: path.resolve(__dirname,'./static/upload') // 配置文件上传的路径
}));
//config.js
module.exports = {
DB_HOST: 'localhost',
DB_USER: 'root',
DB_PASS: '123',
DB_NAME: '20190506'
}
//database.js
const mysql=require('mysql');
const co=require('co-mysql');
const config=require('../config');
let coon = mysql.createPool({
host: config.DB_HOST,
user: config.DB_USER,
password: config.DB_PASS,
database: config.DB_NAME
});
module.exports = co(coon);
//server.js
//数据库
server.context.db = require('./libs/database');
router.get('/login',async (ctx)=>{
// ctx.db.query(`SELECT * FROM user_table`, (err, data)=>{
// if(err){
// console.log('错了', err);
// }else{
// console.log('success',data);
// }
// });
let data = await ctx.db.query(`SELECT * FROM user_table`);
ctx.body = data;
})