-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.ts
77 lines (76 loc) · 2 KB
/
example.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 { Application, Router, STATUS_CODE, STATUS_TEXT } from './mod.ts';
new Application()
.use(async (ctx, next) => {
const start = performance.now();
await next();
console.log(
`[${ctx.status}] ${ctx.request.method} ${ctx.URL.pathname} - ${
performance.now() - start
}ms`
);
})
.use(
new Router('/api/v1')
.post('/echo', async (ctx) => {
ctx.body = await ctx.request.text();
})
.post('/echo.json', async (ctx) => {
ctx.body = await ctx.request.json();
})
.handle()
)
.use(
new Router()
.get('/meow/(?<catName>.+)', (ctx, { catName = '' }) => {
ctx.body = `my name is ${decodeURIComponent(catName)}, meow! 🐱`;
})
.post('/teapot', (ctx) => {
ctx.status = STATUS_CODE.Teapot;
})
.post('/search', async (ctx) => {
ctx.body = new URLSearchParams({ search: await ctx.request.text() });
})
.post('/form', async (ctx) => {
const form = new FormData();
form.set('blob', await ctx.request.blob());
ctx.body = form;
})
.get('/README.md', async (ctx) => {
ctx.contentType = 'text/markdown';
ctx.body = await Deno.open(await Deno.realPath('./README.md'));
})
.all('/ws', (ctx) => {
const socket = ctx.upgrade();
socket.onopen = () => {
socket.send('Hello World!');
};
socket.onmessage = ({ data }) => {
socket.send(data);
};
})
.all('/', (ctx) => {
ctx.contentType = 'text/html';
ctx.body = `<html>
<head>
<title>hello</title>
</head>
<body>
<div>hello!</div>
</body>
</html>
`;
})
.handle()
)
.serve({
port: 3000,
onListen: ({ port }) => {
console.log(`server starts listening at :${port}`);
},
onError(error) {
return new Response(`${error}`, {
status: STATUS_CODE.InternalServerError,
statusText: STATUS_TEXT[STATUS_CODE.InternalServerError],
});
},
});