koajs--基于node.js的下一代web开发框架

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

安装

Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
$ nvm install 7
$ npm i koa
$ node my-koa-app.js

创建一个简单应用

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

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

这样,一个简单的koa应用就创建好了。运行文件,访问3000端口,就可以看到“Hello World”.

级联

与之前的express不同,koa的中间件采用级联的方式,使用async功能,我们可以实现 “真实” 的中间件。对比 Connect 的实现,通过一系列功能直接传递控制,直到一个返回,Koa 调用“下游”,然后控制流回“上游”。

下面采用官方文档的例子,来看一下级联的方式:

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

// logger

app.use(async (ctx, next) => {
  await next();
  const rt = ctx.response.get('X-Response-Time');
  console.log(`${ctx.method} ${ctx.url} - ${rt}`);
});

// x-response-time

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  ctx.set('X-Response-Time', `${ms}ms`);
});

// response

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);
当请求开始时首先请求流通过 x-response-time 和 logging 中间件,然后继续移交控制给 response 中间件。当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。

端口监听

koa的监听端口不唯一,可以将同一个应用程序同时作为 HTTP 和 HTTPS 或多个地址:
const http = require('http');
const https = require('https');
const Koa = require('koa');
const app = new Koa();
http.createServer(app.callback()).listen(3000);
https.createServer(app.callback()).listen(3001);

context

Context 将 node 的 request 和 response 对象封装到单个对象中,为编写 Web 应用程序和 API 提供了许多有用的方法。 这些操作在 HTTP 服务器开发中频繁使用,它们被添加到此级别而不是更高级别的框架,这将强制中间件重新实现此通用功能。
每个 请求都将创建一个 Context,并在中间件中作为接收器引用,或者 ctx 标识符,如以下代码片段所示:
app.use(async ctx => {
  ctx; // 这是 Context
  ctx.request; // 这是 koa Request
  ctx.response; // 这是 koa Response
});

为方便起见许多上下文的访问器和方法直接委托给它们的 ctx.request或 ctx.response ,不然的话它们是相同的。 例如 ctx.type 和 ctx.length 委托给 response 对象,ctx.path 和 ctx.method 委托给 request。

路由

可以使用koa-router

安装

npm install koa-router

看下面一个使用的例子:

const Koa = require('koa')
// 注意 require('koa-router') 返回的是函数:
const router = require('koa-router')()
const app = new Koa()

 // 添加路由
 router.get('/', async (ctx, next) => {
    ctx.response.body = '<h1>index page</h1>'
})

router.get('/home', async (ctx, next) => {
    ctx.response.body = '<h1>HOME page</h1>'
})

router.get('/404', async (ctx, next) => {
    ctx.response.body = '<h1>404 Not Found</h1>'
})

 // 调用路由中间件
 app.use(router.routes())

app.listen(3000, ()=>{
  console.log('server is running at http://localhost:3000')
})

重定向

router.redirect('/login', 'sign-in');

动态路由

router.get('/users/:id', (ctx, next) => {
 // ...
});

这个和vue-router很类似的,这样就可传递参数了,如:user/888

静态资源

当我们要访问静态资源时,这个可以使用 koa-static这个模块。

安装

npm install koa-static

例子如下:

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
 
// $ GET /package.json
app.use(serve('.'));
 
// $ GET /hello.txt
app.use(serve('test/fixtures'));
 
// or use absolute paths
app.use(serve(__dirname + '/test/fixtures'));
 
app.listen(3000);
 
console.log('listening on port 3000');
好了,简单的koa搭建一个we服务就这样搭建了好了,有任何疑问欢迎留言。
参考:
koa开发文档
koa框架教程-阮一峰的网络日志
点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
Nodejs实现图片的上传、压缩预览、定时删除
前言我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。第一步,node基本配置这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力、更健壮的web框架。1、引入基本配置constKoarequire('koa');//koa框架constRouterrequire('koaroute
Stella981 Stella981
3年前
Notadd —— 基于 nest.js 的微服务开发框架
前言随着node.js社区的不断发展,虽然有express、koa、egg....这样的框架,或者更应该称之为工具包,无一解决js作为一个后端语言的问题——架构。Nest.js的出现解决了这些问题,它使用了Typescript,较为完整的AOP思想,同时在IO密集型应用上有着不俗的表现,是真正意义上的后端框架
Stella981 Stella981
3年前
Express简介
Express是一个基于Node.js平台,快速、开放、极简的web开发框架。它的官网地址:http://expressjs.com,中文网址:http://www.expressjs.com.cn/。本篇主要介绍一下Express项目的搭建。假设我们已经安装好了Node.js,现在创建一个目录作为我们的项目目录,进入这个目录下:$
Stella981 Stella981
3年前
Python splinter 环境搭建
今天无意间看到了splinter。Splinter是一个使用Python开发的开源Web应用测试工具。它可以帮你实现自动浏览站点和与其进行交互。Splinter对已有的自动化工具(如:Selenium、PhantomJS和zope.testbrowser)进行抽象,形成一个全新的上层应用API,它使为Web应用编写自动化测试脚本变的更容易。依赖包
Stella981 Stella981
3年前
JavaScript回调函数的高手指南
摘要:本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。回调函数是每个前端程序员都应该知道的概念之一。回调可用于数组、计时器函数、promise、事件处理中。本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。1.回调函数首先写一个向人打招呼的函数。只需要创建一个接受name参数的函数gree
Wesley13 Wesley13
3年前
5分钟Serverless实践:构建无服务器的图片分类系统
前 言在过去“5分钟Serverless实践”系列文章中,我们介绍了如何构建无服务器API和Web应用,从本质上来说,它们都属于基于APIG触发器对外提供一个无服务器API的场景。现在本文将介绍一种新的设计模式:基于事件的实时数据处理。为了更形象地描述,我们以图片分类为例,先介绍通过APIG触发器如何构建一个图片分类的Web应
Wesley13 Wesley13
3年前
1分钟选好最合适你的JavaScript框架
Javascript框架(以下简称框架)也被称为Javascript库,是一组包含丰富功能和函数的JavaScript代码集,能够帮助开发者快速完成Web设计和开发工作。随着Web社区的越发活跃,新的框架也层出不穷,目前流行的有:Angular、React、Vue.js和Knockout等。面对如此丰富多样的框架,很多Web开发团队都感到难以抉择,性能、
Stella981 Stella981
3年前
Koa2实战练手(一)
Koa(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Flink.jianshu.com%3Ft%3Dhttp%3A%2F%2Fkoajs.com%2F)是下一代的Node.js的Web框架。由Express(https://www.oschina.net/action/
可莉 可莉
3年前
12款很赞的web前端移动开发框架
原生移动应用程序运行更快、更顺畅,有更好的用户体验。而同时,前端开发人员总是寻找新的Web技术来获得这种性能。利用现有的高质量移动框架来构建移动Web应用程序已成为非常容易,但是如何选择合适的框架是比较纠结的。因此在本文中,我们整理了12个很赞的移动框架。1.RedbeardRedbeard让它来创建本地应用程序没有一个样板更快和更容易。它与
Easter79 Easter79
3年前
SwiftUI 跨组件数据传递
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言众所周知,SwiftUI的开发模式与React、Flutter非常相似,即都是声明式UI,由数据驱动(产生)视图,视图也会与数据自动保持同步,框架层会帮你处理“绑定”的问题。在声明式UI中不存在命令式地让一个视图变成xxx
liam liam
1年前
一文读懂 Swagger API 未授权访问漏洞及解决方案
是一个用于设计、构建、文档化和使用风格的Web服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试API接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决SwaggerAPI未授权访问漏洞问题。未授权
公司裁员
公司裁员
Lv1
归雁横秋,倦客思家。
文章
4
粉丝
0
获赞
0