美文网首页
koa2框架学习笔记

koa2框架学习笔记

作者: 似朝朝我心 | 来源:发表于2021-11-29 08:02 被阅读0次

起步:
准备1个空白的文件夹作为我们的起手项目
npm init 初始化项目,生成package.json
npm i koa -S 安装koa依赖,官方默认安装的是koa2版本
新建一个index.js文件
目录结构如下:


node 运行js文件

编写index.js文件,作为我们的入口文件。

const koa = require('koa') //引入Koa
const app = new koa() //实例化我们引入的koa对象

//使用(注册)koa,又叫配置中间件服务
app.use(async (ctx, next) => {
    ctx.body = '今天天气不错呀!' //ctx.body 用于向页面写入内容
})

app.listen(8080, () => {
    console.log(`app is running at:localhost:8080`);
})//监听端口


部分参数的解释:
async关键字是ES7的语法,用来声明一个函数是异步的。
里面传入一个context的(ctx)的上下文对象,该对象里面包括一个请求对象request(req)和一个响应对象response(res)

ctx.request是context经过封装的请求对象,ctx.req是context提供的node.js原生HTTP请求对象,
同理ctx.response是context经过封装的响应对象,ctx.res是context提供的node.js原生HTTP响应对象。

这里的ctx对象到底是什么东西,里面有什么?我们不妨通过console.log(ctx)打印出来看一下,我们可以清晰的地看到在ctx这一个整的大对象里面它包含了一个request对象和一个response对象

async和await笔记

asynchronous 中文翻译过来是异步的意思,简写成async。

我们都知道async关键字是用声明一个函数是异步的,是es7的语法,对比普通函数声明的写法可以发现,其实就是普通函数前面多了一个async关键字,你是不是觉得好像也没啥子特别的呀?

不过经过async关键字修饰过的函数返回的是一个es6语法中异步的Promise对象,通过async关键字的修饰,可以将一个普通函数或者方法变成异步的。

这也是异步函数的独到之处,最光鲜靓丽的特点,当你启动异步函数时,它可是返回一个Promise对象哟。


至于await先不管它是干什么的用,至少我们会经常在别人的代码中看到它们,没错,他们一般都是像情侣搭档一样,一出现就一起出现的。

其实await是async和wait这2个关键字的缩写,这一点知道了,就会搞明白了为什么是await而不是wait,虽然翻译成中文都是等待的意思。

那await到底在等待些什么呢?其实await关键字等待的便是async异步函数执行的结果,它不仅可以等待接收一个Promise返回的对象,还可以接收一个普通函数的返回值。

因为await关键字会造成堵塞,所以await关键字必须放在async异步函数里面,这是官方大大说的。

async和await关键字最常用的就是在后端,一般都是在异步请求后端接口的时候使用。

我们既然知道了await关键字可以接收一个promise对象,还知道使用了async修饰函数后会变成一个异步函数,这个异步函数返回的是一个promise对象。

那么我们可以不使用async关键字来声明异步函数,但await关键字却可以接收到一个promise对象吗?确实可以的哦!讲到这里,是不是有点迷糊了呢?

因为我们知道了await关键字可以确实可以接收一个promise对象,其实我们可以这样做,在一个普通函数里面return一个new Promise()对象即可,这也是别人代码中常见的写法,特别在uniapp云函数开发中成为一种习惯。

我们可以得出一个结论:那就是return new Promise()对象等于使用async关键字来声明一个异步函数


koa2中处理get请求

get请求:这些ctx上下文对象里面的基本信息需要了解一下:

const koa = require('koa')
const app = new koa()
app.use(async(ctx, next) => {
    let url = ctx.url //获取页面完整的请求路径

    //从request中获取get请求
    let req = ctx.request //获取整个req请求对象
    let query = req.query //获取查询字符串,返回对象形式
    //也可以直接这样写:let query = ctx.request.query
    let querystring = req.querystring //获取查询字符串

    ctx.body = { //将上述参数打印到页面
        url,
        query,
        querystring
    }
})
//监听端口
app.listen(3000,()=>{
    console.log('server is running at: localhost:3000');
})

代码可能没太明白,看图最直接了,看看他们对应都是些什么信息


此外,我们不仅可以在request对象中获取到get请求的相关信息,此外,我们还可以在ctx上下文对象中获取get请求的基本信息。

const koa = require('koa')
const app = new koa()
app.use(async(ctx, next) => {
    let url = ctx.url //获取页面完整的请求路径
    //通过ctx上下文获取get请求的基本信息
    let query = ctx.query
    let querystring = ctx.querystring

    ctx.body = { //将上述参数打印到页面
        url,
        query,
        querystring
    }
})
//监听端口
app.listen(3000,()=>{
    console.log('server is running at: localhost:3000');
})

页面效果是一样的


结论:想要获取get请求的相关信息,我们既可以从request中获取get请求的相关信息,也可以通过ctx上下文获取get请求的基本信息,效果是一样是。

koa2中处理post请求

ctx.body 向页面写入内容
ctx.url 获取页面访问路径
ctx.method 获取页面发起的请求类型,是get请求还是post请求

post请求案例:模仿页面访问

const koa = require('koa')
const app = new koa()
app.use( async (ctx, next) => {
    if(ctx.url === '/' && ctx.method === 'GET'){
        //如果请求的是首页并且发起的是GET请求,显示如下页面内容
        let html = `
            <h1>用户登录界面</h1>
            <form method='POST' action='/'>
                <p>用户名</p>
                <input type='text' name='userName' /><br/>
                <p>密码</p>
                <input type='password' name='password' /><br/>
                <button type='submit'>登录</button>
            </form>          
        `
        ctx.body = html
    }else if(ctx.url === '/' && ctx.method === 'POST'){
        ctx.body = '接收到页面发过来的post参数'
    }else{
        ctx.body = '<h1>404 page not found!</h1>'
    }
})
//监听端口
app.listen(3000,()=>{
    console.log('server is running at: localhost:3000');
})

相关文章

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

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

  • Koa2框架学习笔记

    框架提出的背景 ES6/7带来的变革 自ES6确定和ES7中async/await开始普及,Node的发展变得更加...

  • Koa2框架学习笔记

    koa2框架笔记 Node.js是一一个异步的世界,官方API支持的都是callback 形式的异步编程模型,这会...

  • koa2框架学习笔记

    起步:准备1个空白的文件夹作为我们的起手项目npm init 初始化项目,生成package.jsonnpm i ...

  • Koa学习资料

    Koa2进阶学习笔记下一代web框架Koajs的在线课程Koa实战深入浅出 Koa Koajs 中文文档和资料

  • 从零开始构建一个Koa2+MySQL项目

    一、初始化Koa2框架 1.运用脚手架初始化Koa2框架 2.使用koa-generator生成koa2项目 3....

  • koa2框架笔记

    koa2框架笔记 Node.js是一一个异步的世界,官方API支持的都是callback 形式的异步编程模型,这会...

  • koa2框架学习

    koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本。 一、koa2的优势 ...

  • koa2学习

    搭建博客 koa2笔记阮一峰koa2 多项目目录结构

  • koa框架搭建

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

网友评论

      本文标题:koa2框架学习笔记

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