前言

koa2的脚手架,默认模板引擎是jade。如果想用art-template或者是ejs的模板的同学可以点击这个链接koa脚手架,拉去使用即可。


地址分享
koa_api:拉去下来,运行直接使用即可。
koa脚手架:搭建好的koa脚手架,使用art-template模板引擎,或者ejs


Koa

安装

  • 1、初始化package.json

npm init --yes

  • 2、安装koa 、koa-router

cnpm install koa koa-router --save

  • 3、创建入口文件app.js
const Koa = require('koa');
const Router = require('koa-router')

// 创建一个Koa对象表示web app本身:
const app = new Koa();
const router = new Router();

//配置路由
app.use(router.routes()).use(router.allowedMethods());
const port = process.env.PORT || 5000;

router.get('/', async ctx => {
   
  ctx.body = {
   msg:'hellow koa'}
})
// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
   
    await next();
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
});

// 在端口3000监听:
app.listen(port);
console.log(`app started at port ${
     port}`);
  • 4、启动项目即可

koa配置art-template模板

art-template,速度非常快,推荐使用。

  • 安装
cnpm install --save art-template
cnpm install --save koa-art-template
  • 配置
const render = require('koa-art-template')

render(app,{
   
    root:path.join(__dirname,'view'),
    extname:'.art',
    debug:process.env.NODE_ENV !== 'production'
})

koa配置ejs模板引擎

  • 安装
npm install koa-view --save

npm install ejs --save
  • 配置
const views = require('koa-views')
app.use(view(__dirname,{
   extension:'ejs'}))  //
  • 使用
await ctx.render('index.html')
  • 语法
<%= title %> //变量
    
<% array.forEach(element => {
    %>
   <%= element %>
<% }) %>  //遍历
    
<% include public/header.ejs %>  //引入模板
    
<%- element %> //变量(会解析HTML)
    
<% if(num>24) {
    %>  //判断
<% }else{
    %>    
<% } %>    
  • 操作

koa静态资源中间件(配置)

  • 安装
cnpm install koa-static --save
  • 配置
const serve = require('koa-static')

app.use(serve(__dirname + '/static'))

koa中cookie

cookie保存在浏览器。

koa中无法使用中文cookie,使用Buffer解决。

  • 使用
ctx.cookies.set('userInfo','zhangsan'.{
   
	maxAge:60*1000*24  //过期时间
    path:'/news' //配置可以访问的cookie路径
    domain:'.baidu.com'  //正常情况不需要设置
    httpOnly:true; //这个cookie只有服务器才能访问。 false表示浏览器服务器都可以使用cookie、
    overwrite
    
})

ctx.cookies.get('userInfo')

console.log(new Buffer('hellow,word!').toString('base64'))
console.log(new Buffer('aGVsbG8sIHdvcmxkIQ==','base64').toString())

koa中使用Session

  • 安装
cnpm install koa-session --save
  • 配置
var session = require('koa-session')

app.keys = ['some secret hurr']
const CONFIG = {
   
  key: 'koa.sess', /** 默认 */
  maxAge: 86400000, //过期时间
  autoCommit: true, /** (boolean) automatically commit headers (default true) */
  overwrite: true, /** (boolean) can overwrite or not (default true) */
  httpOnly: true, /** ture表示只有服务器可以获取session */
  signed: true, /** 默认 签名 */
  rolling: false, /** 每次请求强行设置我们的session */
  renew: true, /** 每次操作,就会重新设置时间*/
  secure: true, /** (boolean) secure cookie*/
  sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};


 
app.use(session(CONFIG, app));
  • 使用
ctx.session.userInfo = '张三'  //设置
ctx.session.userinfo    //获取

koa操作mongodb数据库

  • 1、安装mongose

cnpm install mongose --save

  • 2 、使用mongose链接数据库
mongose.connect('url',,{
    useNewUrlParser: true })
	.then((res) => {
   
    console.log('链接成功')
  })
  .catch((res) => {
   
    console.log('数据库链接失败')
  })

koa 配置路由

koa的路由配置使用koa-router

cnpm install koa-router --save

const router = require('koa-router')()

//get 获取参数
router.get('/test',async (ctx) => {
   
    //直接使用
    console.log(ctx.query)  //{ aid: '123' } 获取的是对象 用的最多的方式 **推荐
    console.log(ctx.querystring) //aid=123&name=zhangsan 获取的是一个字符串
    
    //使用request
    console.log(ctx.request.query);   //{ aid: '123', name: 'zhangsan' } 对象
    console.log(ctx.request.querystring);   //aid=123&name=zhangsan
})


app.use(router.routes(),router.allowedMethods())   //启动路由 router中有一个方法routes方法,执行这个方***把router中所有的路由添加到项目上。



request可以不写,用法类似与window.document 可以直接写document。

配置bodyparser中间件

使用post的方法,需要引入。koa-bodyparser这个包

cnpm install koa-bodyparser --save

完成后可以在,ctx中的request的body属性中拿到值。(这个包会把post请求前端传递过来的数据添加到ctx的request属性上。在ctx上不能访问

koa密码加密

安装bcrypt.js

cnpm i bcryptjs

  • 1 、哪里需要加密,就在那里引用
const bcrypt = require('bcryptjs')


//哪里需要需要加密这段代码就放在哪里
bcrypt.genSalt(10, (err, salt) => {
   
      bcrypt.hash('需要加密的内容', salt, (err, hash) => {
   
        console.log(hash)  //加密后的hash值
         newUser.password = hash
      });
  });

koa配置头像(墓碑)

  • 1、安装

cnpm i gravatar --save

const gravatar = require('gravatar')
const avatar = gravatar.url(ctx.request.body.email, {
   s: '200', r: 'pg', d: 'mm'});

koa使用Token

  • 1、安装jsonwebtoken

cnpm i jsonwebtoken --save

const payload = {
   id: user.id,name:user.name,avatar:user.avatar}  //需要传递的参数
const token = jwt.sign(payload,"secret",{
   expiresIn:3600}); //进行token配置,参数、密钥、时间
ctx.status = 200;
ctx.body = {
   success:true , token: 'Bearer ' + token}

验证token

安装

cnpm i koa-passport --save

安装

cnpm i passport-jwt

验证输入内容格式

validator

安装

cnpm i validator

中间件

koa中的中间件

应用级中间件

app.use(async (ctx,next) => {
   
    console.log(new Date());
    await next()
})

路由中间件

router.get('/news',async (ctx,next) => {
   
    await next()
})

错误处理中间件

app.use(async (ctx,next) => {
   
    console.log(new Date());
    await next()
    
    if(status == 404){
   
        ctx.body = {
   message:'找不到页面'}
    }
})

koa脚手架

脚手架默认模板引擎是jade

  • cnpm install koa-generator -g
  • koa koa_demo
  • cd koa_demo
  • yarn
  • npm start

总结

为了帮同学们更好的理解前后端交付这里我给大家封装了一个接口。拉去下来直接使用即可。api