• nodeJs 进阶Koa入门


    Koa 是一个新的 web 框架,作者和之前的express是同一批人,整个框架的核心就在于中间件的使用。大致写法和express类似

    const fs = require('fs'); // 文件模块
    const Koa = require('koa');
    const app = new Koa();
    // 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
    
    /* nodejs
    createReadStream(path,option):该用来打开一个可读的文件流,它返回一个fs.ReadStream对象
    @params:path指定文件的路径
    @params:options可选,是一个JS对象,可以指定一些选项如:
    let option={
                  flags: 'r',//指定用什么模式打开文件,’w’代表写,’r’代表读,类似的还有’r+’、’w+’、’a’等
                  encoding: 'utf8',//指定打开文件时使用编码格式,默认就是“utf8”,你还可以为它指定”ascii”或”base64”
                  fd: null,//fd属性默认为null,当你指定了这个属性时,createReadableStream会根据传入的fd创建一个流,忽略path。另外你要是想读取一个文件的特定区域,可以配置start、end属性,指定起始和结束(包含在内)的字节偏移
                  mode: 0666,
                  autoClose: true//autoClose属性为true(默认行为)时,当发生错误或文件读取结束时会自动关闭文件描述符
              }
    
    */
    // app.use(async (ctx) => {
    //   // ctx.body = 'hello koa2'
    //   console.log(ctx,'123') // 返回的是整个请求实列
    //   ctx.type = 'html';
    //   ctx.body = fs.createReadStream('./index.html');
    // });
    // middleware的顺序很重要,也就是调用app.use()的顺序决定了middleware的顺序。next()决定是否继续执行下一个middleware
    app.use(async (ctx, next) => {
      console.log(123)
      console.log(`${ctx.request.method} ${ctx.request.url}`); // 打印URL middleware也就是中间件
      await next(); // 调用下一个middleware 如果不写则不会向下执行其他的app.use
    });
    
    app.use(async (ctx, next) => {
      const start = new Date().getTime(); // 当前时间 格式化
      await next(); // 调用下一个middleware
      const ms = new Date().getTime() - start; // 耗费时间
      console.log(`Time: ${ms}ms`); // 打印耗费时间
    });
    //如果一个middleware没有调用await next(),后续的middleware将不再执行了。
    app.use(async (ctx, next) => {
      //checkUserPermission 检测用户权限的中间件
      if (await checkUserPermission(ctx)) {
        await next();
      } else {
        ctx.response.status = 403;
      }
    });
    app.use(async (ctx, next) => {
      await next();
      ctx.response.type = 'text/html';
      ctx.response.body = '<h1>Hello, koa2!</h1>';
    });
    
    
    app.listen(1029);
    
  • 相关阅读:
    Jenkins+SVN+Maven自动化部署环境搭建
    基于Maven+SSM整合shiro+Redis实现后台管理项目
    Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7
    如何用Jmeter做压力测试
    项目沟通管理中的几种技巧
    软件生命周期管理(ALM)
    大数据入门-记录
    为啥项目做到最后都成为了“屎山”,代码改不动
    看企业如何玩转低代码,引发效率革命
    行云创新亮相云栖大会,解读云原生时代开发者工具变革探索与实践
  • 原文地址:https://www.cnblogs.com/wangjiahui/p/12625400.html
Copyright © 2020-2023  润新知