mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-07-05 01:30:17 +00:00
59 lines
1008 B
TypeScript
59 lines
1008 B
TypeScript
import Koa = require("koa");
|
|
|
|
declare module "koa" {
|
|
interface ExtendableContext {
|
|
errors?: Error[];
|
|
}
|
|
}
|
|
|
|
interface DbBaseContext {
|
|
db(): void;
|
|
}
|
|
|
|
interface UserContext {
|
|
user: {};
|
|
}
|
|
|
|
const app = new Koa<{}, DbBaseContext>();
|
|
|
|
app.context.db = () => {};
|
|
|
|
app.use(async ctx => {
|
|
if (ctx.errors) {
|
|
ctx.throw(ctx.errors[0], 400);
|
|
}
|
|
});
|
|
|
|
app.use(async (ctx, next) => {
|
|
try {
|
|
return await next();
|
|
} catch (ex) {
|
|
ctx.errors = [ex];
|
|
}
|
|
});
|
|
|
|
app.use<{}, UserContext>(async ctx => {
|
|
console.log(ctx.db);
|
|
ctx.user = {};
|
|
});
|
|
|
|
app.use((ctx, next) => {
|
|
const start: any = new Date();
|
|
return next().then(() => {
|
|
const end: any = new Date();
|
|
const ms = end - start;
|
|
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
|
|
ctx.assert(true, 404, "Yep!");
|
|
});
|
|
});
|
|
|
|
// response
|
|
app.use(ctx => {
|
|
ctx.body = "Hello World";
|
|
ctx.body = ctx.URL.toString();
|
|
});
|
|
|
|
app.listen(3000);
|
|
|
|
const server = app.listen();
|