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就是,請求->中間件->返回
它把請求與返回優雅地處理好了,我們只需要關注中間部分邏輯,即中間件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM