Перечисление свойств контекста в коа - PullRequest
0 голосов
/ 06 мая 2019

Со вчерашнего дня я учусь использовать фреймворк Koa, чтобы реализовать его в своем проекте машинописи.Я немного пытаюсь понять контекстный объект, потому что он, кажется, ведет себя необычным образом.

Я установил Koa 2.7.0, и я кодировал очень простой сервер с помощью официального документация .Я попытался понять различные переменные, представленные Koa, поэтому я попытался console.log их.Однако, похоже, что некоторые из этих переменных выдают ошибку, когда я пытаюсь получить к ним доступ.

Я также пытался добавить пользовательское свойство к app.context в соответствии с документацией .Это работает, я могу получить доступ к свойству и работать с ним, но его нет в списке, когда я console.log родительский объект.

Это мой код вместе с парой комментариев:

import Koa from "koa";
const app = new Koa();

// setting custom property 'hello'
app.context.hello = "world!";

// setting custom property 'N' using the defineProperty method
Object.defineProperty(app.context, "N", {
  configurable: true,
  enumerable: true,
  value: 42,
  writable: true
});

// Works as expected, outputs "world!" in the console.
console.log(app.context.hello);

// Triggers an error:
// (node:2076) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'toJSON' of undefined
// Why can't I log app.context when I can access app.context.hello?
console.log(app.context);

// Works as expected, outputs the prototype of app.context
console.log(Object.getPrototypeOf(app.context));

app.use(async ctx => {

  // Works as expected, outputs "world!"
  console.log(ctx.hello);
  // Works as expected, outputs 42
  console.log(ctx.N);
  // Outputs an array of property names
  // However 'hello' and 'N' are not listed
  // Why? I could access them just a few lines above
  console.log(Object.getOwnPropertyNames(ctx));
  // Outputs the ctx object
  // Also doesn't list the 'hello' and 'N' properties
  console.log(ctx);

  // Triggers an error:
  // TypeError: Cannot read property 'toJSON' of undefined
  // Why?
  console.log(Object.getPrototypeOf(ctx));
  ctx.body = 'Hello World';
});
app.listen(3000);

Я не понимаю, почему какой-то console.log вызывает ошибку.И я также не могу понять, почему я не могу перечислить свойства, к которым я могу получить доступ, даже когда я устанавливаю свойство как перечисляемое с Object.defineproperty().Я впервые наблюдаю такое поведение.Любая идея?Спасибо!

...