知新 | koa框架入门到熟练第二章

简介: 这里对koa-bodyparser的使用教程。

koa-bodyparser 使用

这里对koa-bodyparser的使用教程。

目录如下

ejs文件

ejs模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/doAdd" method="post">
    用户名: <input type="text" name="username"/>
    密码: <input type="password" name="password"/>
    <button type="submit">提交</button>
</form>
</body>
</html>

koa-bodyparser

使用koa-bodyparser获取body内容



var koa = require("koa");

var Router = require("koa-router");

var bodyParser = require("koa-bodyparser");

var app = new koa();

var router = new Router();

var views = require("koa-views");

app.use(views("views", {
    extension: "ejs",
}))

app.use(bodyParser());

// koa中间件
app.use(async (ctx, next) => {
    console.log(new Date());

    await next();
});



router.get("/", async (ctx) => {
    await ctx.render("index");
})

router.post("/doAdd", async (ctx) => {
    console.log(ctx.request.body);
    ctx.body = ctx.request.body;
})
app.use(router.routes());
app.use(router.allowedMethods());


app.listen(3001);

使用效果

登录页面

koa-static

这里学习使用koa-static

安装

PS C:\Users\Administrator\Desktop\untitled3> npm install --save koa-static
npm WARN untitled3@1.0.0 No description
npm WARN untitled3@1.0.0 No repository field.

+ koa-static@5.0.0
added 1 package in 2.042s

2 packages are looking for funding
  run `npm fund` for details

PS C:\Users\Administrator\Desktop\untitled3>

访问效果

访问效果如下

art-template

这里使用art-template 作为一个模板引擎使用

安装

PS C:\Users\Administrator\Desktop\untitled3> npm install --save art-template
npm WARN untitled3@1.0.0 No description
npm WARN untitled3@1.0.0 No repository field.

+ art-template@4.13.2
added 33 packages from 141 contributors in 6.704s

2 packages are looking for funding
  run `npm fund` for details

PS C:\Users\Administrator\Desktop\untitled3> npm install --save koa-art-template
npm WARN untitled3@1.0.0 No description
npm WARN untitled3@1.0.0 No repository field.

+ koa-art-template@1.1.1
added 2 packages from 4 contributors in 2.336s

2 packages are looking for funding
  run `npm fund` for details

代码如下



var koa = require("koa");

var Router = require("koa-router");

var bodyParser = require("koa-bodyparser");

var static = require("koa-static");

var app = new koa();

var router = new Router();

var views = require("koa-views");

var render = require("koa-art-template");

var path = require("path");

app.use(views("views", {
    extension: "ejs",
}))

app.use(static("./static"));

app.use(bodyParser());

// koa中间件
app.use(async (ctx, next) => {
    console.log(new Date());

    await next();
});



router.get("/", async (ctx) => {
    await ctx.render("index");
})

router.post("/doAdd", async (ctx) => {
    console.log(ctx.request.body);
    ctx.body = ctx.request.body;
})

render(app, {
    root: path.join(__dirname, "views"),
    extname: ".art",
})

app.use(async function (ctx){
    await ctx.render("user");
})

app.use(router.routes());
app.use(router.allowedMethods());


app.listen(3001);

art 文件如下



var koa = require("koa");

var Router = require("koa-router");

var bodyParser = require("koa-bodyparser");

var static = require("koa-static");

var app = new koa();

var router = new Router();

var views = require("koa-views");

var render = require("koa-art-template");

var path = require("path");

app.use(views("views", {
    extension: "ejs",
}))

app.use(static("./static"));

app.use(bodyParser());

// koa中间件
app.use(async (ctx, next) => {
    console.log(new Date());

    await next();
});



router.get("/", async (ctx) => {
    await ctx.render("index");
})

router.post("/doAdd", async (ctx) => {
    console.log(ctx.request.body);
    ctx.body = ctx.request.body;
})

render(app, {
    root: path.join(__dirname, "views"),
    extname: ".art",
})

app.use(async function (ctx){
    await ctx.render("user");
})

app.use(router.routes());
app.use(router.allowedMethods());


app.listen(3001);

访问效果

cookie



var koa = require("koa");

var Router = require("koa-router");

var bodyParser = require("koa-bodyparser");

var static = require("koa-static");

var app = new koa();

var router = new Router();

var views = require("koa-views");

var render = require("koa-art-template");

var path = require("path");


app.use(bodyParser());

// koa中间件
app.use(async (ctx, next) => {
    console.log(new Date());

    await next();
});

router.get("/", async (ctx) => {
    ctx.cookies.set("ming", "ming")
})
app.use(router.routes());
app.use(router.allowedMethods());


app.listen(3001);

koa-session

PS C:\Users\Administrator\Desktop\untitled3> npm install koa-session
npm WARN untitled3@1.0.0 No description
npm WARN untitled3@1.0.0 No repository field.

+ koa-session@6.0.0
added 10 packages from 14 contributors in 3.484s

2 packages are looking for funding
  run `npm fund` for details

PS C:\Users\Administrator\Desktop\untitled3>

编写一个简单的刷新页面次数增加



var koa = require("koa");

var Router = require("koa-router");

var bodyParser = require("koa-bodyparser");

var static = require("koa-static");

var app = new koa();

var router = new Router();

var views = require("koa-views");

var render = require("koa-art-template");

var path = require("path");

var session = require("koa-session");

app.keys = ['secret'];   // session加密字段

app.use(session({
    key: 'koa:sess', //cookie key (default is koa:sess)
    maxAge: 86400000, // cookie的过期时间 maxAge in ms (default is 1 days)
    overwrite: true, //是否可以overwrite    (默认default true)
    httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
    signed: true, //签名默认true
    rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
    renew: false, //(boolean) renew session when session is nearly expired,
}, app));

app.use(bodyParser());

// koa中间件
app.use(async (ctx, next) => {
    console.log(new Date());

    await next();
});


app.use(ctx => {
    // ignore favicon
    if (ctx.path === '/favicon.ico') return
    console.log(ctx.session)
    let n = ctx.session.views || 0
    ctx.session.views = ++n
    ctx.body = n + ' views'
});


router.get("/", async (ctx) => {
    ctx.cookies.set("ming", "ming")
})

app.use(router.routes());
app.use(router.allowedMethods());


app.listen(3001);

原型链继承

// 构造原型
function Person(name, age) {
    this.name = name;
    this.age = 333;
    this.run = function () {
        console.log(this.name, this.age)
    }
}

// 添加work方法,在原型链上继承
Person.prototype.work = () => {
    console.log("work");
}

function Web() {

}

// 同样继承
Web.prototype = new Person();

var w = new Web();
// 以下两个运行原型链的值
w.run();
w.work()

静态方法和构造方法

// 新建类
class Person{
    constructor(name) {
        this._name = name;
    }
    run(){
        console.log(this._name);
    }
    // 静态方法
    static work(){
        console.log("静态方法");
    }
}

Person.work();

koa 操作mongoDB

安装相关的库


PS C:\Users\Administrator\Desktop\untitled3> npm install mongodb --save
npm WARN untitled3@1.0.0 No description
npm WARN untitled3@1.0.0 No repository field.

+ mongodb@3.5.9
updated 1 package in 2.854s

2 packages are looking for funding
  run `npm fund` for details

PS C:\Users\Administrator\Desktop\untitled3>

增加一条数据



var MongoClient = require("mongodb").MongoClient;

var dbUrl = 'mongodb://106.53.115.12:27017/'

var dbName = "koa";

// 连接
MongoClient.connect(dbUrl, (err, client) => {
    if(err){
        console.log(err);
        return;
    }

    var db = client.db(dbName);

    // 增加数据
    db.collection("user").insertOne({
        "username":"xiaoxiao","age":"23"
    });

})

结果:

对返回结果进行处理



var MongoClient = require("mongodb").MongoClient;

var dbUrl = 'mongodb://106.53.115.12:27017/'

var dbName = "koa";

// 连接
MongoClient.connect(dbUrl, (err, client) => {
    if(err){
        console.log(err);
        return;
    }

    var db = client.db(dbName);

    // 增加数据
    db.collection("user").insertOne({
        "username":"xiaoxiao","age":"23"
    }, function (err, result) {
        if(!err){
            console.log("增加数据成功 ");
            client.close();
            console.timeEnd("start");
        }
    });

})

查询数据

代码如下



var MongoClient = require("mongodb").MongoClient;

var dbUrl = 'mongodb://106.53.115.12:27017/'

var dbName = "koa";

// 连接
MongoClient.connect(dbUrl, (err, client) => {
    if(err){
        console.log(err);
        return;
    }

    var db = client.db(dbName);

    var result = db.collection("user").find(0);

    result.toArray((err, docs) => {
        console.log(docs);
    })

})

输出内容如下

"C:\Program Files\nodejs\node.exe" C:\Users\Administrator\Desktop\untitled3\01es6.js
(node:15216) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
  { _id: 5f0fe666bc0d9e41101dffd3, username: 'xiaoxiao', age: '23' },
  { _id: 5f0fe7f4949f1b420c120fe7, username: 'xiaoxiao', age: '23' }
]

koa 应用生成器

全局安装

使用全局安装koa的脚手架

PS C:\Users\Administrator\Desktop\untitled3> npm install koa-generator -g
npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
C:\Users\Administrator\AppData\Roaming\npm\koa -> C:\Users\Administrator\AppData\Roaming\npm\node_modules\koa-generator\bin\koa
C:\Users\Administrator\AppData\Roaming\npm\koa2 -> C:\Users\Administrator\AppData\Roaming\npm\node_modules\koa-generator\bin\koa2
+ koa-generator@1.1.17
updated 1 package in 0.905s
PS C:\Users\Administrator\Desktop\untitled3>

创建项目

PS C:\Users\Administrator\Desktop> ls


    目录: C:\Users\Administrator\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2020/7/14     17:08                insurv-mina-node-api
d-----        2020/7/14     17:45                koa
d-----        2020/7/14     17:55                untitled
d-----        2020/7/16     14:16                untitled3
-a----        2020/7/16     12:04        5782870 Navicat Premium 15.x最新注册机.zip
-a----        2020/7/14     17:07           1428 Visual Studio Code.lnk
-a----       2019/11/30     18:03           1526 WPS 2019.lnk
-a----        2020/7/14     18:52           1064 百度网盘.lnk


PS C:\Users\Administrator\Desktop> mkdir ./ming


    目录: C:\Users\Administrator\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2020/7/16     14:19                ming


PS C:\Users\Administrator\Desktop> ls


    目录: C:\Users\Administrator\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2020/7/14     17:08                insurv-mina-node-api
d-----        2020/7/14     17:45                koa
d-----        2020/7/16     14:19                ming
d-----        2020/7/14     17:55                untitled
d-----        2020/7/16     14:16                untitled3
-a----        2020/7/16     12:04        5782870 Navicat Premium 15.x最新注册机.zip
-a----        2020/7/14     17:07           1428 Visual Studio Code.lnk
-a----       2019/11/30     18:03           1526 WPS 2019.lnk
-a----        2020/7/14     18:52           1064 百度网盘.lnk


PS C:\Users\Administrator\Desktop> cd ./ming
PS C:\Users\Administrator\Desktop\ming> ls
PS C:\Users\Administrator\Desktop\ming> koa koa_demo

   create : koa_demo
   create : koa_demo/package.json
   create : koa_demo/app.js
   create : koa_demo/public
   create : koa_demo/routes
   create : koa_demo/routes/index.js
   create : koa_demo/routes/users.js
   create : koa_demo/public/javascripts
   create : koa_demo/views
   create : koa_demo/views/index.jade
   create : koa_demo/views/layout.jade
   create : koa_demo/views/error.jade
   create : koa_demo/public/images
   create : koa_demo/public/stylesheets
   create : koa_demo/public/stylesheets/style.css
   create : koa_demo/bin
   create : koa_demo/bin/www

   install dependencies:
     > cd koa_demo && npm install

   run the app:
     > SET DEBUG=koa_demo:* & npm start

PS C:\Users\Administrator\Desktop\ming> ls


    目录: C:\Users\Administrator\Desktop\ming


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2020/7/16     14:19                koa_demo


PS C:\Users\Administrator\Desktop\ming> cd ./koa_demo
PS C:\Users\Administrator\Desktop\ming\koa_demo>

此时脚手架已经安装成功

安装依赖

PS C:\Users\Administrator\Desktop\ming\koa_demo> npm install
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated swig@1.4.2: This package is no longer maintained
npm WARN deprecated jade@1.11.0: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated constantinople@3.0.2: Please update to at least constantinople 3.1.1
npm WARN deprecated transformers@2.1.0: Deprecated, use jstransformer
npm WARN deprecated native-or-bluebird@1.2.0: 'native-or-bluebird' is deprecated. Please use 'any-promise' instead.

> nodemon@1.19.4 postinstall C:\Users\Administrator\Desktop\ming\koa_demo\node_modules\nodemon
> node bin/postinstall || exit 0

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

added 367 packages from 208 contributors in 21.748s

1 package is looking for funding
  run `npm fund` for details

PS C:\Users\Administrator\Desktop\ming\koa_demo>

启动项目

npm start
目录
相关文章
yum install、localinstall和groupinstall区别
yum install、localinstall和groupinstall区别
785 0
|
存储 缓存 前端开发
【数据结构/C语言】深入理解 双向链表
【数据结构/C语言】深入理解 双向链表
|
11月前
|
安全 API 开发者
深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
在ArkUI框架中,组件化开发至关重要。@LocalBuilder作为自API version 12引入的装饰器,专注于组件内部私有构建,确保封装性与安全性。本文解析其工作原理、参数传递机制及与@Builder的区别,结合典型场景代码示例,助开发者掌握这一工具。通过状态驱动UI更新、复杂组件组合等实践,优化性能并提升代码可维护性,推动高效UI架构构建。
333 0
|
12月前
|
人工智能 安全 算法
IP地址、SSL与DeepSeek:现代网络安全的三角防线
在数字化浪潮中,IP地址、SSL协议与AI大模型DeepSeek分别作为网络通信的标识、加密护盾和智能防御核心,共同重塑网络安全范式。本文从技术原理、实践挑战与防御策略三个维度解析其融合价值与未来趋势。IP地址是设备的唯一标识,但易被攻击者利用;SSL通过加密确保数据安全;DeepSeek则通过AI实现智能威胁检测。三者的协同作用,为网络安全提供了全新的解决方案。未来将面临量子计算、AI对抗升级等挑战,需加速技术创新与安全意识提升,构建“协议可信+地址可控+AI赋能”的三维防线,以应对日益复杂的网络安全环境。
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
776 3
|
运维 Kubernetes 数据处理
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
Kubernetes已经成为事实的云原生操作系统,成为业务上云、容器化的标准。从过去无状态应用、企业核心应用,到现在AI时代的数据处理、AI训练、科学仿真等,越来越多的离线任务跑在K8s上。
|
Shell Go 开发工具
使用 Hugo 快速搭建一个云博客系统
使用Hugo快速搭建博客,Hugo是基于Go的静态站点生成器,以其简单、高效著称。[官网](https://gohugo.io/) 提供多种主题,如[m10c](https://themes.gohugo.io/themes/hugo-theme-m10c/)等。在Mac上可通过`brew install hugo`安装。创建站点`hugo new site ~/hugo-blog`,
526 0
使用 Hugo 快速搭建一个云博客系统
|
关系型数据库 MySQL 数据安全/隐私保护
【MySQL】手把手教你MySQL各版本忘记密码如何处理
【MySQL】手把手教你MySQL各版本忘记密码如何处理
|
机器学习/深度学习 网络协议 算法
IGP高级特性(一)
IGP高级特性(一)
|
设计模式 前端开发 Swift
使用Swift进行iOS应用开发:深入探索与最佳实践
【5月更文挑战第24天】探索Swift在iOS开发中的深度应用与最佳实践。Swift以其简洁语法、类型安全、面向对象、高性能及与Objective-C的互操作性脱颖而出。使用Xcode设置开发环境,学习Swift语法,创建并设计项目,编写业务逻辑,同时进行调试和测试。遵循MVC模式,利用SwiftUI、并发特性,并注重内存管理,持续学习新工具和技术,以实现高质量应用开发。