xml地图|网站地图|网站标签 [设为首页] [加入收藏]

KOA 学习(二)

澳门新葡新京官方网站 ,KING OF ARTIST 20周年纪念版路飞以[运输物流 ,海贼王手办中质量和大小的最高峰]为看点的KING OF ARTIST系列为了纪念海贼王原作20周年而推出了这款以海贼王罗杰的服装为基础特别设计的路飞手办.25厘米的全高和特别设计的服装都让人十分期待.首先是包装盒.本作与强调动作的手办不同,没有过多特效,采用了稳重霸气的色彩和封盒设计.路飞正面全身照,全高25厘米存在感十分强烈.四肢比原作有所加长,尤其是腿部非常瘦长,但是斜挂的外套很好地控制了整体的视觉平衡感,看起来非常舒服.脸部刻画很棒,路飞自信的笑容还原度相当高.经过20年的冒险(?)少年的领袖气质已经在各方面崭露头角.本系列除了尺寸以外还以高质量为卖点,路飞的配件和衣服细节十分丰富,草帽和外套金色部分的枝干处理的很不错,唯一的缺点就是胸口的金链涂装比较残念.本作整体质量上乘,20周年特别设计让追更多年的海贼粉感慨万千,又对今后的冒险充满期待.推荐海贼粉入手!

app.listen(...)

Koa 应用并非是一个 1-to-1 表征关系的 HTTP 服务器。 一个或多个Koa应用可以被挂载到一起组成一个包含单一 HTTP 服务器的大型应用群。

var koa = require('koa');
var app = koa();
app.listen(3000);

app.listen(...) 实际上是以下代码的语法糖:

var http = require('http');
var koa = require('koa');
var app = koa();
http.createServer(app.callback()).listen(3000);

这意味着您可以同时支持 HTTP 和 HTTPS,或者在多个端口监听同一个应用。

const http = require('http');
const Koa = require('koa');
const app = new Koa();
http.createServer(app.callback()).listen(3000);
http.createServer(app.callback()).listen(3001);

app.callback()

返回一个适合 http.createServer()KOA 学习(二)。 方法的回调函数用来处理请求。 您也可以使用这个回调函数将您的app挂载在 Connect/Express 应用上。

/**
 * Create HTTP server.
 */

var server = http.createServer(app.callback());

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

app.use(function)

为应用添加指定的中间件,详情请看 Middleware

app.keys=

设置签名Cookie密钥,该密钥会被传递给 KeyGrip。

当然,您也可以自己生成 KeyGrip 实例:

app.keys = ['im a newer secret', 'i like turtle'];
app.keys = new KeyGrip(['im a newer secret', 'i like turtle'], 'sha256');

在进行cookie签名时,只有设置 signed 为 true 的时候,才会使用密钥进行加密:

ctx.cookies.set('name', 'tobi', { signed: true });

app.context

app.context 是ctx中创造来的,你可以对通过app.context ctx增加属性。这是一个很有用的属性用来贯穿你的整个app.app.context is the prototype from which ctx is created from. You may add additional properties to ctx by editing app.context. This is useful for adding properties or methods to ctx to be used across your entire app, which may be more performant (no middleware) and/or easier (fewer require()s) at the expense of relying more on ctx, which could be considered an anti-pattern.

app.context.db = db();

app.use(async (ctx) => {
  console.log(ctx.db);
});

错误处理

默认情况下Koa会将所有错误信息输出到 stderr,除非 NODE_ENV 是 "test"。为了实现自定义错误处理逻辑(比如 centralized logging),您可以添加 "error" 事件监听器。

app.on('error', function(err){
  log.error('server error', err);
});

如果错误发生在 请求/响应 环节,并且其不能够响应客户端时,Contenxt 实例也会被传递到 error 事件监听器的回调函数里。

app.on('error', function(err, ctx){
  log.error('server error', err, ctx);
});

当发生错误但仍能够响应客户端时(比如没有数据写到socket中),Koa会返回一个500错误(Internal Server Error)。

无论哪种情况,Koa都会生成一个应用级别的错误信息,以便实现日志记录等目的。

 

Context(上下文)

Koa Context 将 node 的 request 和 response 对象封装在一个单独的对象里面,其为编写 web 应用和 API 提供了很多有用的方法。

这些操作在 HTTP 服务器开发中经常使用,因此其被添加在上下文这一层,而不是更高层框架中,因此将迫使中间件需要重新实现这些常用方法。

context 在每个 request 请求中被创建,在中间件中作为接收器(receiver)来引用.

在KOA1.0中

app.use(function *(){
  this; // is the Context
  this.request; // is a koa Request
  this.response; // is a koa Response
});

在KOA2.0中

app.use(async (ctx, next) => {
  ctx; // is the Context
  ctx.request; // is a koa Request
  ctx.response; // is a koa Response
});

API

Context 详细的方法和访问器。

ctx.req

Node 的 request 对象。

ctx.res

Koa 不支持 直接调用底层 res 进行响应处理。请避免使用以下 node 属性:

res.statusCode,res.writeHead(),res.write(),res.end()

本文由澳门新葡亰是真的吗发布于行业新闻,转载请注明出处:KOA 学习(二)

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。