zoukankan      html  css  js  c++  java
  • koa初体验(1)

    koa搭建本地服务器

    新建文件夹 npm init 初始化

    新建app.js文件

    安装

    npm i koa -S // 安装koa模块
    npm i koa-router -S // 安装koa路由模块
    
    const Koa  = require('koa')
    const Router  = require('koa-router')
    
    const app = new Koa()
    const router = new Router()
    
    router.get('/test:id',(ctx)=>{
    	ctx.body = "测试页面"; 
    	
    	ctx.query();	// 获取参数对象形式返回 
    	ctx.querystring();	// 获取参数,字符串返回
    	ctx.url();	// 获取当前页面url
    	
    	localhsot:3000/test:id=123
    	console.log(ctx.params) // 获取动态传递的参数
    	// 获取到的返回值{id:'123'}
    })
    
    app.use(router.routers()) // 启动路由
    app.use(router.allowedMethods()) // 默认添加响应头内容
    
    
    app.listen(3000); //监听本地的端口
    

    koa中间件

    匹配路由之前或者之后的操作,对于url的路径作为一个处理

    app.use(async(ctx,next)=>{
    	console.log('这是一个中间件')
    	next(); // 是否继续匹配
    })
    
    // 判断当前响应状态
    app.use(async(ctx,next)=>{
    	if(ctx.status == 404){
    		// 如果页面找不到的时候
    		ctx.body = "404页面"
    	}else{
    		next(); // 是否继续匹配
    	}
    })
    
    

    ejs模板引擎

    安装

    npm i koa-views -S	// 安装koa-views
    npm i ejs -S	// 安装ejs
    

    使用

    const views =require('koa-views')(); // 引入并实例化
    const ejs = require('ejs')
    
    // 配置中间件
    app.use(views('views'),{
    	extension:'ejs'	// 使用ejs模板引擎
    })
    
    // 同上相同效果 使用的时候views文件夹中的文件后缀为html
    //app.use(views('views'),{
    //	map:{
    //		html:'ejs'
    //	}
    //})
    
    // 创建views文件夹,文件夹下新建index.ejs文件
    router.get('/',async(ctx)=>{
    	// 传递参数
    	let title = '传递的参数标题:测试'
    	await ctx.render('index',title) // 此处会对ejs文件进行匹配渲染到对应的路由
    })
    
    

    views = > index

    <h2><%=title%></h2> // 将传递的title进行显示
    
    
    // 循环
    <ul>
    	<%for(var i=0;i<+list.length;i++){%>
    		<li><%=list[i]%></li>	
    	<%}%>
    </ul>
    
    // 条件判断
    <%if(num>24){%>
    	大于24
    <%}else{%>
    	其他
    <%}%>
    
    // html解析 定义content = <h1>我是传递过来的标题</h1>
    <%-=content%>
    

    ejs公共模块

    <% include public/header.ejs%>
    

    ejs公共数据处理 (放置到中间件中,方便每一个页面使用)

    ctx.state =  {
    	title:'公共数据'
    }
    
    缓存
    options
    
    maxAge	 数字从Date.now()得到的毫秒数
    expires	 cookie过期时间
    path	 cookie的路径,默认为'/'
    domain	 cookie域名
    secure	 安全的cookie,默认为false,设置为true表示
    httpOnly 是否只是服务器可以访问cookie,默认是true
    
    使用
    
    router.get('/',async(ctx)=>{
    	// 设置cookies
    	key:对应的cookies名称
    	value:对应名称设置的值
    	maxAge:设置过期时间
    	path:设置可以访问设置cookies的页面
    	ctx.cookies.set('key',value,{
    		maxAge:60+100*24,
    		path:'/home'
    	});
    })
    
    router.get('/',async(ctx)=>{
    	// 获取cookies
    	const getCookies = ctx.cookies.get('key');
    })
    
    tip:koa中无法设置中文的cookies - value 
    
    解决
    将文字转化为base64编码之后对base64进行转化
    
    

    koa session

    安装

    npm i koa-session -S
    

    使用

    const session = require('koa-sseion')
    
    // 配置session中间件
    
    app.keys = ['some secret hurr']; // 签名
    const CONFIG = {
      key: 'koa.sess',
      maxAge: 86400000, /** 过期时间 [需要配置]*/ 
      autoCommit: true, /** 默认*/
      overwrite: true, /** 默认设置 */
      httpOnly: true, /** 默认 true表示只有服务端可以获取cookie */
      signed: true, /** 默认签名 */
      rolling: false, /** 更新 */
      renew: false, /** */
      secure: false, /** 每次请求的时候强制设置cookie,这会重置cookie的过期时间*/
      sameSite: null, /** 即将过期的是时候,重新设置  [需要配置] */
    };
     
    app.use(session(CONFIG, app));
    
    router.get('/',async(ctx)=>{
    	// 设置session
    	ctx.session.userinfo = '张三';
    })
    
    router.get('/',async(ctx)=>{
    	// 获取session
    	console.log(ctx.session.userinfo)
    })
    
    愿以往所学皆有所获
  • 相关阅读:
    停止Java线程,小心interrupt()方法
    SLG手游Java服务器的设计与开发——架构分析
    大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
    【转】阿里云主机购买使用教程
    使用 Apache MINA 开发高性能网络应用程序
    浅谈Java的Mina框架传递对象
    解析Mina代码三部曲
    java 子类继承父类 -- 重写、覆盖
    经度之战
    [USACO1.3]虫洞wormhole
  • 原文地址:https://www.cnblogs.com/Azune/p/14101905.html
Copyright © 2011-2022 走看看