deno.land / x / opine@2.3.4 / examples / mvc / lib / boot.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { opine } from "../../../mod.ts";import type { Application } from "../../../src/types.ts";import { dirname, join } from "../../../deps.ts";import { renderFileToString } from "../deps.ts";
const rootDirname = dirname(import.meta.url);
export default async function (parent: Application) { const dir = new URL("controllers/", rootDirname);
for (const { name: fileName } of Deno.readDirSync(dir)) { const filePath = new URL(`${fileName}/index.ts`, dir); const obj = await import(filePath.toString()); const name = obj.name ?? fileName; const prefix = obj.prefix ?? ""; const app = opine();
let handler; let method; let url;
app.set("view engine", "ejs"); app.engine(".ejs", renderFileToString); app.set("views", join(rootDirname, "..", "controllers", name, "views"));
// Generate routes based on the exported methods for (const key in obj) { // "Reserved" exports if (~["name", "prefix", "before"].indexOf(key)) continue; // Route exports switch (key) { case "show": method = "get"; url = `/${name}/:${name}_id`; break; case "list": method = "get"; url = `/${name}s`; break; case "edit": method = "get"; url = `/${name}/:${name}_id/edit`; break; case "update": method = "post"; url = `/${name}/:${name}_id`; break; case "create": method = "post"; url = `/${name}`; break; case "index": method = "get"; url = "/"; break; default: /* istanbul ignore next */ throw new Error(`unrecognized route: ${name}.${key}`); }
// setup handler = obj[key]; url = prefix + url;
// before middleware support if (obj.before) { (app as any)[method](url, obj.before, handler); } else { (app as any)[method](url, handler); } }
// mount the app parent.use(app); }}
opine

Version Info

Tagged at
2 years ago