美文网首页
【Koa2】Koa2学习(三)—手写原生路由

【Koa2】Koa2学习(三)—手写原生路由

作者: 花卷呀花卷 | 来源:发表于2018-12-25 16:43 被阅读0次

(一)使用ctx.url判断路由并返回页面

通常我们会直接根据请求的路由地址,返回对应的页面,比如

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx)=> {
    if (ctx.url == '/') {
        ctx.body = `
            <form action="/sumit" method="post"> 
                    <p>First name: <input type="text" name="fname" /></p>
                    <p>Last name: <input type="text" name="lname" /></p>
                    <input type="submit" value="Submit" />
            </form>
        `;
    } else if (ctx.url == '/sumit') {
        ctx.body = `<h1>success</h1>`;
    } else {
        ctx.body = `<h1>error</h1>`;
    }
})

app.listen(3000, ()=>{console.log('[demo03] server is starting ...')})

在以上的例子中直接通过ctx.body返回html页面,这样的结构极不利于维护,因此需要将后端代码和前端代码分离

(二)前后端分离

实现思路是:需要一个文件夹专门放Html页面;在js文件中,需要一个函数专门读取路由,一个函数根据路由读取页面,最后再由ctx.body返回

1.需要新建一个文件夹,存放html页面


image.png

2.新建js文件,引入fs

在函数体内使用await 调用route函数,并传入url

const Koa = require('koa');
const fs = require('fs');
const app = new Koa();

app.use(async (ctx)=> {
    let html = await route(ctx.request.url)
    ctx.body = html
})

app.listen(3000, ()=> {console.log('[demo04] server is starting ...')})

3.route函数判断路径

async function route(url) {
    // 默认页面
    let page = '404.html'
    switch (url) {
        case '/':
            page = 'index.html';
            break;
        case '/submit':
            page = 'submit.html';
    }
    return await render(page)
}

4.render函数读取html页面

function render(page) {
    return new Promise((resolve, reject)=> {
        let pageUrl = `./pages/${page}`;
        fs.readFile(pageUrl, 'binary', (err, data) => {
            if(err){
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
}

(三)完整的代码

image.png

相关文章

  • Koa 2 初体验(二)

    Koa2 路由 Koa2 原生路由的实现 路由在web中的作用不言而喻,而要先实现原生路由,需要的到地址栏输入的路...

  • koa2 自学笔记(二)

    此系列文章会持续更新。。。 这篇主要讲 koa2 的路由 首先,我们先用 koa2 原生实现一个简单的路由然后再使...

  • 【Koa2】Koa2学习(三)—手写原生路由

    (一)使用ctx.url判断路由并返回页面 通常我们会直接根据请求的路由地址,返回对应的页面,比如 在以上的例子中...

  • 关于koa2的基础知识

    1、koa2 路由配置 2、koa2 中的 get 传值以及获取 get 传值 在 koa2 中,GET 传值通过...

  • koa2入门系列

    koa2入门系列(一) koa2入门系列(二) koa2入门系列(三) koa2入门系列(四) koa2入门系列(...

  • nodejs 学习笔记(1)koa2 koa-generator

    koa2是nondejs的开发框架,最近学习nodejs,这里记记笔记 首先安装好nodejs 安装koa2,全局...

  • koa框架搭建

    主要是学习了慕课网从0到1打造超好用Web框架 一步到位 掌握KOA2服务端开发的一个总结和复盘。原生的koa2还...

  • Node.js中Koa2在控制台输出请求日志的方法

    Koa2真的是个很轻量的框架,轻量到路由都作为了模块单独了出来,Koa2也没有日志功能,如果我们需要有一些请求的日...

  • Koa2脚手架框架搭建流程

    Koa2脚手架框架搭建流程 记录一下自己之前使用koa2创建项目时初始化的整个流程: 路由 数据库 返回结构定义 ...

  • Koa2 路由

    第一步 引入koa 和 fs模块读取html用 第二步新建几个页面 第三步 使用koa-router npm 安装...

网友评论

      本文标题:【Koa2】Koa2学习(三)—手写原生路由

      本文链接:https://www.haomeiwen.com/subject/wziflqtx.html