• Koa帮我们做了什么


    整理web渲染思路,与KOA作比较
    1.开启服务器并监听端口,注册监听事件

        // 原生
        let http  = require('http')
        const server = http.createServer((req, res) => {
            // res.setHeader('Content-Type', 'text/html')
            // res.end('ok')
        });
        server.listen(port)//port为端口
        // Koa  将监听事件request移出构造,设计到中间件内
        let Koa = require('koa')
        let app = new  Koa ()
        app.listen(port)
    

    2.请求信息分析url模块
    1.路径url.parse(req.url) 请求路径的获取以及请求类型的获取(这里被Koa处理并包装成一个request对象)

        // 原生
        const server = http.createServer((req, res) => {
            let url = url.parse(req.url)
            let method = req.method
        });
        // Koa  将信息封装到request对象上,并可以通过别名简化访问
        app.use(async ctx => {
            let url = ctx.url
            let method = ctx.method
        })
        
    

    2.参数接受querystring,以及POST方法参数获取(监听res的data事件,在end方法中获取)(这里设计成了一个koa-bodyparse中间件)

    //get
        // 原生
        const server = http.createServer((req, res) => {
            let url = url.parse(req.url)
            let query = querystring(url.query)    
        });
        // Koa  将信息封装到request对象上,并可以通过别名简化访问
        app.use(async ctx => {
            let query = ctx.query
        })
    //post
        // 原生
        const server = http.createServer((req, res) => {
            let content
            req.on('data', chunk => {
                content+=chunk
            })
            req.on('end', () => {
                let query = querystring.parse(content)
                console.log(query)
            })
        });
        // Koa  将过程封装到中间件去
        let bodyParser = require('koa-bodyparser')
        app.use(boodyParser())
        app.use(async ctx => {
            let postQuery = querystring.parse(ctx.request.body);
        })
    

    3.静态资源与动态资源(返回头信息已经被Koa处理)
    静态资源 设定静态资源路径,对静态资源路径结合fs模块返回(中间件)

        // 原生
            //通过fs访问静态资源,需要手动设置内容类型以及状态码
        function staticSend(filename, headers={'Content-Type': 'text/html;charset=utf-8'}, statusCode=200) {
            res.writeHead(statusCode, http.STATUS_CODES[statusCode], headers);
            content = fs.readFileSync(filename);
            res.end(content);
        }
        const server = http.createServer((req, res) => {
            let url = url.parse(req.url)
    		staticSend(`${__dirname}/${url}`)
        });
    	// Koa 通过koa-static-cache中间件可以设置静态资源访问规则,只需定义访问路径即可	
    	const koaStaticCache = require('koa-static-cache')
    	app.use( koaStaticCache( __dirname + '/static', {
        prefix: '/public',
    	} ) )
    
    
    动态资源 设定对应路径的请求返回  路由处理
    
    	// 原生
    	// 根据访问路径case然后处理对应路径返回结果
    	// Koa
    	const Router = require('koa-router');
    	const router = new Router();
    	router.get('/list', async (ctx, next) => {
    		ctx.body = await ctx.render('list.html', {
    			users
    		});
    	})
    	app.use( router.routes() );
    

    Koa核心:这个框架有点思想和webpack类似,编写文件->loader/plugins->最终文件,而Koa就是,请求->中间件->返回
    它把请求与返回优雅地处理好了,我们只需要关注中间部分逻辑,即中间件

  • 相关阅读:
    2020/4/29 一场令人头疼的cf。。。
    2020/4/27 日常补坑-tarjan第一道awa
    2020/4/26 2-sat 学习笔记
    SHADEILS--Success History based Adaptive Differential Evolution with Iterative Local Search
    再探动态规划——lettcode689三个无重叠数组的最大和
    学算法——gradient descent
    学算法——particle swarm optimization
    读论文——A study on Artificial Potential Fields
    install libspatialindex on macOS
    Supervised Learning003
  • 原文地址:https://www.cnblogs.com/sefaultment/p/10054905.html
Copyright © 2020-2023  润新知