koa基本使用

59 篇文章 1 订阅
1 篇文章 0 订阅

koa

基本使用

var Koa = require('koa');
var Router = require('koa-router');

var app = new Koa();
var router = new Router();


/* 

    koa 中间件


*/
app.use(async(ctx, next) => {
    console.log(new Date())

    await next();

})


router.get('/', (ctx, next) => {
    // ctx.router available
    ctx.body = "首页"
}).get('/news', async(ctx, next) => {
    ctx.body = " news"
});

app
    .use(router.routes())
    .use(router.allowedMethods()).listen(3000, () => {
        console.log("http://127.0.0.1:3000")
    });

中间件

洋葱模型

koa被认为是第二代node web framework,它最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型。koa和koa2中间件的思路是一样的,但是实现方式有所区别,koa2在node7.6之后更是可以直接用async/await来替代generator使用中间件,本文以最后一种情况举例。

clipboard.pngclipboard.png

举例

const Koa = require('koa');

const app = new Koa();
const PORT = 3000;

// #1
app.use(async (ctx, next)=>{
    console.log(1)
    await next();
    console.log(1)
});
// #2
app.use(async (ctx, next) => {
    console.log(2)
    await next();
    console.log(2)
})

app.use(async (ctx, next) => {
    console.log(3)
})

app.listen(PORT);
console.log(`http://localhost:${PORT}`);

访问http://localhost:3000,控制台打印:

1
2
3
2
1

怎么样,是不是有一点点感觉了。当程序运行到await next()的时候就会暂停当前程序,进入下一个中间件,处理完之后才会仔回过头来继续处理。也就是说,当一个请求进入,#1会被第一个和最后一个经过,#2则是被第二和倒数第二个经过,依次类推。

错误处理中间件

var Koa = require('koa');
var Router = require('koa-router');

var app = new Koa();
var router = new Router();


/* 

    koa 中间件


*/
app.use(async(ctx, next) => {
    console.log(new Date())

    await next();
    if (ctx.status == 404) {
        ctx.status = 404;
        ctx.body = "这是一个404 页面"
    }
})


router.get('/', (ctx, next) => {
    // ctx.router available
    ctx.body = "首页"
}).get('/news', async(ctx, next) => {
    ctx.body = " news"
});

app
    .use(router.routes())
    .use(router.allowedMethods()).listen(3000, () => {
        console.log("http://127.0.0.1:3000")
    });

post 请求

npm install -D koa-bodyparser

const Koa = require('koa');
var Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
const router = new Router();


/* 

    koa 中间件


*/

// 使用post请求const
app.use(bodyParser());

app.use(async(ctx, next) => {
    console.log(new Date())

    await next();
    if (ctx.status == 404) {
        ctx.status = 404;
        ctx.body = "这是一个404 页面"
    }
})


router.get('/', (ctx, next) => {
    // ctx.router available
    ctx.body = "首页"
}).get('/news', async(ctx, next) => {
    ctx.body = " news"
}).post('/login', async(ctx) => {
    console.log(ctx.request)
    ctx.body = ctx.request.body
});

app
    .use(router.routes())
    .use(router.allowedMethods()).listen(3000, () => {
        console.log("http://127.0.0.1:3000")
    });

在这里插入图片描述

静态web服务

npm i -D koa-static

const Koa = require('koa');
var Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
const router = new Router();

const static = require('koa-static');
/* 

    koa 中间件


*/

// 使用post请求const
app.use(bodyParser());
// 静态资源中间件
app.use(static(__dirname + "/static"))
app.use(async(ctx, next) => {
    console.log(new Date())

    await next();
    if (ctx.status == 404) {
        ctx.status = 404;
        ctx.body = "这是一个404 页面"
    }
})


router.get('/', (ctx, next) => {
    // ctx.router available
    ctx.body = "首页"
}).get('/news', async(ctx, next) => {
    ctx.body = " news"
}).post('/login', async(ctx) => {
    console.log(ctx.request)
    ctx.body = ctx.request.body
});

app
    .use(router.routes())
    .use(router.allowedMethods()).listen(3000, () => {
        console.log("http://127.0.0.1:3000")
    });

在这里插入图片描述

koa 应用生成器

通过应用koa脚手架生成工具 可以快速创建一个基于koa2的应用的骨架。

通过如下命令安装:

$ npm install koa-generator -g
			

-h 选项可以列出所有可用的命令行选项:

$ koa -h
			
			  Usage: koa [options] [dir]
			
			  Options:
			
			    -h, --help          output usage information
			    -V, --version       output the version number
			    -e, --ejs           add ejs engine support (defaults to jade)
			        --hbs           add handlebars engine support
			    -H, --hogan         add hogan.js engine support
			    -c, --css <engine>  add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
			        --git           add .gitignore
			    -f, --force         force on non-empty directory
			

例如,下面的示例就是在当前工作目录下创建一个命名为 myapp 的应用。

$ koa koa_demo       (创建名称为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/views
   create : koa_demo/views/index.jade
   create : koa_demo/views/layout.jade
   create : koa_demo/views/error.jade
   create : koa_demo/bin
   create : koa_demo/bin/www
   create : koa_demo/public/javascripts
   create : koa_demo/public/stylesheets
   create : koa_demo/public/stylesheets/style.css

   install dependencies:
     > cd koa_demo && npm install

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

   create : koa_demo/public/images
			

然后安装所有依赖包:

$ cd koa_demo 
$ npm install

启动这个应用(MacOS 或 Linux 平台):

$ DEBUG=myapp npm start
			

启动项目:

> npm start
			

然后在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。i

通过 koa 应用生成器创建的应用一般都有如下目录结构:

.
			├── app.js
			├── bin
			│   └── www
			├── package.json
			├── public
			│   ├── images
			│   ├── javascripts
			│   └── stylesheets
			│       └── style.css
			├── routes
			│   ├── index.js
			│   └── users.js
			└── views
			    ├── error.jade
			    ├── index.jade
			    └── layout.jade
			
			7 directories, 9 files
			

通过 koa 应用生长期创建应用只是众多方法中的一种。你可以不使用它,也可以修改它让它符合你的需求,都是开源的嘛!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值