Со вчерашнего дня я учусь использовать фреймворк 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()
.Я впервые наблюдаю такое поведение.Любая идея?Спасибо!