北鸟南游的博客 北鸟南游的博客
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
关于我
归档
GitHub (opens new window)
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
关于我
归档
GitHub (opens new window)
  • JavaScript

    • 原生js
    • vue
    • react
    • node
      • commonjs规范requireJs
      • express框架搭建的webSocket请求
      • nodeAPI
      • node基础入门01
      • node基础入门02
      • node基础入门03
      • node基础入门04
        • koa2框架介绍基本操作
          • 安装koa2
          • 使用koa2
        • get传参
        • post传参
          • 原生获取post请求数据的步骤
          • 使用中间件koa-bodyparse
        • koa2路由
          • koa-router中间件路由使用
        • 设置cookie
          • 写入cookie值
          • 读取cookie
        • koa-static静态化资源文件
      • node基础入门05
      • node基础入门06
      • 通过验证邮箱进行注册信息确认
    • nextjs
    • 其它框架
  • 界面

  • front
  • javascript
  • node
北鸟南游
2019-07-30
目录

node的koa2框架

  • 第一篇:node基础特性介绍,并且启动一个服务 (opens new window)
  • 第二篇:node的npm包管理和上传文件操作 (opens new window)
  • 第三篇:node的express框架 (opens new window)
  • 第四篇:node的koa2框架 (opens new window)
  • 第五篇:node开发使用的数据库 (opens new window)
  • 第六篇:node的cookie和session以及websocket使用 (opens new window)

# koa2框架介绍基本操作

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

# 安装koa2

初始化项目: npm init -y 安装:npm i -S koa

# 使用koa2

const Koa = require("koa");
const app = new Koa();
app.use(async ctx=>{
    ctx.body="hello koa!";
})
app.listen(3000,()=>{
    console.log("koa server run on port:3000");
})
1
2
3
4
5
6
7
8

# get传参

app.use(async ctx=>{
    let url = ctx.url
    let request = ctx.request
    let req_query = request.query
    let req_querystring = request.querystring
    let ctx_query = ctx.query
    let ctx_querystring = ctx.querystring

    ctx.body = {url, req_query, req_querystring, ctx_query, ctx_querystring}
})
1
2
3
4
5
6
7
8
9
10

访问地址:http://localhost:3000/?user=ti&age=10,可以查看参数

# post传参

# 原生获取post请求数据的步骤

  • 解析上下文ctx中的原生nodex.js对象req。
  • 将POST表单数据解析成query string-字符串.(例如:user=jspang&age=18)
  • 将字符串转换成JSON格式。

函数parsePostData,接收post数据的方法

function parsePostData(ctx){
    return new Promise((resolve,reject)=>{
        try{
            let postdata="";
            ctx.req.on('data',(data)=>{
                postdata += data
            })
            ctx.req.addListener("end",function(){
                // resolve(postdata);  //数据为字符串
               let parseData = parseQueryStr( postdata )
                resolve(parseData);   //数据为json
				}) 
		}catch(error){ 
			reject(error); 
		}
	})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

函数parseQueryStr:格式化请求到的数据字符串

function parseQueryStr(queryStr){
    let queryData={};
    let queryStrList = queryStr.split('&');
    console.log(queryStrList);
    for( let [index,queryStr] of queryStrList.entries() ){
        let itemList = queryStr.split('=');
        console.log(itemList);
        queryData[itemList[0]] = decodeURIComponent(itemList[1]);
    }
    return queryData
}
1
2
3
4
5
6
7
8
9
10
11

最后直接将结果打印到前端页面 let pastData=await parsePostData(ctx); ctx.body=pastData;

# 使用中间件koa-bodyparse

安装:npm install --save koa-bodyparser@latest 使用:const bodyParser = require("koa-bodyparser") app.use(bodyParser())

# koa2路由

  • 原生路由: 通过匹配let url = ctx.request.url; url匹配到哪个页面就显示对应的页面
  • koa-router(基础,层级(全局、局部)) 使用koa-router中间件 const Router = require('koa-router');

# koa-router中间件路由使用

# 基础路由使用

router.get('/', function (ctx, next) {
    ctx.body="Hello index";
}).get('/news',(ctx,next)=>{
    ctx.body="news page"
}).get('*',(ctx,next)=>{
    ctx.body="404 page"
});
1
2
3
4
5
6
7

# 添加全局层级

const router = new Router({
      prefix:'/admin'
})
1
2
3

# 添加局部层级

通过定义不同的路由对象,最后统一添加到总的router对象中。

// 定义home层级
let home = new Router()
home.get("/", async (ctx)=>{
	ctx.body = "home index"
})
.get("/todo", async(ctx)=>{
	ctx.body = "home todo"
})
// 定义news层级
let news = new Router()
news.get("/", async (ctx)=>{
	ctx.body = "news index"
})
.get("/todo", async (ctx)=>{
	ctx.body = "news todo"
})
// 装载所有子路由
let router = new Router()
router.use("/home",home.routes(),home.allowedMethods )
router.use("/news",news.routes(),news.allowedMethods )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 设置cookie

# 写入cookie值

ctx.cookie.set("username","koa",{
     domain:'127.0.0.1', // 写cookie所在的域名
     path:'/index',       // 写cookie所在的路径
     maxAge:1000*60*60*24,   // cookie有效时长
     expires:new Date('2099-12-31'), // cookie失效时间
     httpOnly:false,  // 是否只用于http请求中获取
     overwrite:false  // 是否允许重写
})
1
2
3
4
5
6
7
8

# 读取cookie

if( ctx.cookies.get('username')){
	ctx.body = ctx.cookies.get('username');
}
1
2
3

# koa-static静态化资源文件

安装koa-static中间件 npm install --save koa-static

//将static文件设置为静态文件夹
const static = require('koa-static')
const staticPath = './static'

app.use(static(
  path.join( __dirname,  staticPath)
))

1
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2025/04/19, 14:22:11
node基础入门03
node基础入门05

← node基础入门03 node基础入门05→

最近更新
01
色戒2007
04-19
02
真实real
04-19
03
Home
更多文章>
Theme by Vdoing | Copyright © 2018-2025 北鸟南游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式