基于Node.js平台的web开发框架---- async / await
1.检查Node环境、安装Koa
node  -v
npm  init -y
npm install koa 
2.创建文件和文件夹
① app.js文件:-- 入口文件
// 引入koa
const Koa = require('koa')
// 创建koa实例对象
const app = new Koa()
// 编写响应函数    洋葱模型的中间件
// 第一层中间件--总耗时中间件
const respDurationMiddleware = require('./middleware/koa_response_duration')
app.use(respDurationMiddleware)
// 第二层中间件--响应头中间件
const respHeaderMiddleware = require('./middleware/koa_response_header')
app.use(respHeaderMiddleware)
// 第三层中间件--业务逻辑中间件
const resDataMiddleware = require('./middleware/koa_response_data')
app.use(resDataMiddleware)
// 监听端口
app.listen(8888) //127.0.0.1:8888
// 启动服务器 命令行敲命令 node app.js 
② data文件夹: -- 存放json数据
③ middleware文件夹:-- 中间件
koa_response_duration.js文件:
module.exports = async (ctx, next) => {
  //记录开始的时间
  const start = Date.now()
  await next()
  //记录结束的时间
  const end = Date.now()
  // 计算服务器总耗时时长
  const duration = end - start
  ctx.set('X-Response-Time', duration + 'ms')
} 
koa_response_header.js文件:
module.exports = async (ctx, next) => {
  const contentType = 'application/json;charset=utf-8'
  // 响应头
  ctx.set('Content-Type', contentType)
  // ctx.response.body = '{"success" : true}';
  // 设置响应头  允许跨域
  ctx.set('Access-Control-Allow-Origin', '*')
  ctx.set('Access-Control-Allow-Methods', 'OPTIONS,GET,PUT,DELETE')
  await next()
} 
koa_response_data.js文件:
// 业务逻辑中间件
const path = require('path')
const fileUtils = require('../utils/file_utils')
module.exports = async (ctx, next) => {
  //浏览器请求路径url -- /api/seller
  const url = ctx.request.url //
  //   将/api / seller   换成 ../data/seller.json
  let filePath = url.replace('/api', '')
  filePath = '../data' + filePath + '.json'
  filePath = path.join(__dirname, filePath)
  try {
    const ret = await fileUtils.getFileJsonData(filePath)
    ctx.response.body = ret
  } catch (error) {
    const errorMsg = {
      message: '读取文件内容失败,文件资源不存在',
      status: 404
    }
    ctx.response.body = JSON.stringify(errorMsg)
  }
  console.log(filePath)
  await next()
} 
④ utils文件夹中:-- 工具文件
file_utils.js文件:
// 读取文件的工具方法
const fs = require('fs')
module.exports.getFileJsonData = filePath => {
  //   return "你好";
  return new Promise((resolve, reject) => {
    fs.readFile(filePath, 'utf-8', (error, data) => {
      if (error) {
        reject(error)
      } else {
        resolve(data)
      }
    })
  })
}









