basic http server class
parent
66e02f3fac
commit
099f7749fc
@ -0,0 +1,57 @@
|
||||
class Server {
|
||||
async getEnv(variables) {
|
||||
return Object.fromEntries(
|
||||
await Promise.all(
|
||||
variables.map(async variable => {
|
||||
const {state} = await Deno.permissions.query({
|
||||
name: 'env', variable
|
||||
})
|
||||
if (state === 'granted') {
|
||||
return [variable, Deno.env.get(variable)]
|
||||
} else {
|
||||
return [variable, undefined]
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
async configure() {
|
||||
const env = await this.getEnv([
|
||||
'PORT', 'BASE_URL'
|
||||
])
|
||||
this.port = env.PORT ?? 3000
|
||||
this.baseUrl = env.BASE_URL ?? '/macchiato'
|
||||
}
|
||||
|
||||
async serveRequest(event) {
|
||||
const {pathname} = new URL(event.request.url)
|
||||
if (pathname === `${this.baseUrl}/api/auth`) {
|
||||
event.respondWith(new Response(
|
||||
'extract query and redirect', {status: 200}
|
||||
))
|
||||
} else {
|
||||
event.respondWith(new Response(
|
||||
'here', {status: 404}
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
async serveConn(conn) {
|
||||
console.log({conn})
|
||||
const httpConn = Deno.serveHttp(conn)
|
||||
for await (const event of httpConn) {
|
||||
this.serveRequest(event)
|
||||
}
|
||||
}
|
||||
|
||||
async serve() {
|
||||
await this.configure()
|
||||
this.server = Deno.listen({
|
||||
port: this.port,
|
||||
})
|
||||
for await (const conn of this.server) {
|
||||
this.serveConn(conn)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue