Node学习---koa

常用中间件

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 配置数据库

创建服务 koa
const Koa = require('koa');

let server = new Koa();
server.listen(8080);
创建路由 koa-router
const Router = require('koa-router');

let router = new Router();
server.use(router.routes());
配置静态文件以及文件缓存时间 koa-static
//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
}));

配置koa-session
//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 别忘了配置

koa-ejs
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

处理数据使用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') // 配置文件上传的路径
}));

连接数据库 mysql co-mysql
//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;
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值