Koa
エイリアス:いくつかの一般的なプロパティやメソッドをCTXにフックする。
/**
* new Koa -> Application
* context コンテキスト・オブジェクト
ctx -> context コンテキスト・オブジェクト
ctx.request リクエストオブジェクト
ctx.response レスポンスオブジェクト
ctx.res -> res
ctx.req -> req
*/
const Koa = require("koa");
const app = new Koa();
app.use((ctx) => {
// ctx.body = "ハローワールド";
// ctx.body = {
// msg:"ハローワールド"
// };
// end()
// エイリアス:いくつかの一般的なプロパティやメソッドをCTXにフックする。
// ブラウザに送信されるすべてのレスポンス・オブジェクトを探す
// ブラウザからリクエストオブジェクトを探す。
// ctx.body = "hello world";
ctx.response.body = "hello world"
});
app.listen(8081);
オニオンモデル
// ミドルウェア:この関数が使われている
// ミドルウェアを追加する
app.use((ctx, next) => {
console.log(">>>> fn1");
next();
console.log("<<<< fn1 ------------------------");
ctx.body = "fn1"
});
app.use((ctx, next) => {
console.log(">>>> fn2");
next()
console.log("<<<< fn2");
ctx.body = "fn2"
});
app.use((ctx, next) => {
console.log(">>>> fn3");
next()
console.log("<<<< fn3");
});
リクエストからレスポンスまでの合計時間
// log
app.use((ctx, next) => {
const startTime = Date.now();
next();
console.log("time:", Date.now() - startTime);
});
app.use((ctx) => {
ctx.body = "hahahah ";
});
非同期
app.use(async (ctx, next) => {
const startTime = Date.now();
await next();
console.log("time:", Date.now() - startTime);
});
app.use(async (ctx) => {
await delay();
ctx.body = "hahahah ";
});
function delay() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 2000);
});
}
複数のミドルウェア内でのパラメータの受け渡し
// 複数のミドルウェア間でパラメータを渡す
app.use((ctx, next) => {
ctx.kkb = {
name: "hahah",
};
next()
});
app.use((ctx) => {
console.log(ctx.kkb.name);
});
app.listen(8081);
http
302リダイレクトのシミュレーション
const Koa = require("koa")
const app = new Koa()
app.use((ctx) => {
ctx.status = 302
ctx.set('location', 'https://..com/')
})
app.listen(8081)