koajs--基于node.js的下一代web开发框架
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
每个 请求都将创建一个 Context,并在中间件中作为接收器引用,或者 ctx 标识符,如以下代码片段所示:
参考:
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框架教程-阮一峰的网络日志
相关推荐
往后余生 2020-09-17
webgm 2020-08-16
CXsilent 2020-09-16
Lophole 2020-06-28
sqliang 2020-06-14
xcguoyu 2020-06-13
徐建岗网络管理 2020-06-11
前端开发Kingcean 2020-06-11
cbao 2020-06-10
yezitoo 2020-06-06
bigname 2020-06-04
前端开发Kingcean 2020-05-29
xiaofanguan 2020-05-29
ELEMENTS爱乐小超 2020-05-28
皖林 2020-05-11
wbczyh 2020-05-03
zuihaobushi 2020-04-30