From ea062a2ab234ccee4fad2c45a6066ade8b9ef704 Mon Sep 17 00:00:00 2001 From: Nebula Date: Fri, 28 Jan 2022 11:25:38 -0500 Subject: [PATCH] Add deno-oak starter (#214) --- examples/deno-oak/.gitignore | 5 +++++ examples/deno-oak/Dockerfile | 15 +++++++++++++++ examples/deno-oak/README.md | 26 ++++++++++++++++++++++++++ examples/deno-oak/deps.ts | 1 + examples/deno-oak/dev_deps.ts | 1 + examples/deno-oak/src/index.ts | 30 ++++++++++++++++++++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 examples/deno-oak/.gitignore create mode 100644 examples/deno-oak/Dockerfile create mode 100644 examples/deno-oak/README.md create mode 100644 examples/deno-oak/deps.ts create mode 100644 examples/deno-oak/dev_deps.ts create mode 100644 examples/deno-oak/src/index.ts diff --git a/examples/deno-oak/.gitignore b/examples/deno-oak/.gitignore new file mode 100644 index 0000000..ecc57a4 --- /dev/null +++ b/examples/deno-oak/.gitignore @@ -0,0 +1,5 @@ +.env +.vscode/ +coverage/ +cov/ +lcov/ \ No newline at end of file diff --git a/examples/deno-oak/Dockerfile b/examples/deno-oak/Dockerfile new file mode 100644 index 0000000..96b67d5 --- /dev/null +++ b/examples/deno-oak/Dockerfile @@ -0,0 +1,15 @@ +FROM denoland/deno:1.15.3 + +WORKDIR /app + +USER deno + +# Cache deps first +ADD deps.ts . +RUN deno cache deps.ts + +# These steps will be re-run upon each file change in your working directory: +ADD . . +RUN deno cache src/index.ts + +CMD deno run --allow-net --allow-env src/index.ts diff --git a/examples/deno-oak/README.md b/examples/deno-oak/README.md new file mode 100644 index 0000000..5805752 --- /dev/null +++ b/examples/deno-oak/README.md @@ -0,0 +1,26 @@ +--- +title: Deno with Oak +description: An example webserver using Oak +tags: + - typescript +--- + +# Deno Oak Example + +This example is a small [Deno](https://deno.land/) webserver using [Oak](https://github.com/oakserver/oak) for routing. + +[![Deploy on Railway](https://railway.app/button.svg)](https%3A%2F%2Frailway.app%2Fnew%3Ftemplate%3Dhttps%3A%2F%2Fgithub.com%2Frailwayapp%2Fexamples%2Ftree%2Fmaster%2Fexamples%2Fdeno-oak) + +## ✨ Features + +- Deno +- TypeScript +- Oak Routing +## 💁‍♀️ How to use + +- [Install Deno](https://deno.land/) +- Run server `deno run --allow-net --allow-env src/index.ts` + +## 📝 Notes + +This is an experimental example and should not be used in production. diff --git a/examples/deno-oak/deps.ts b/examples/deno-oak/deps.ts new file mode 100644 index 0000000..8074ae5 --- /dev/null +++ b/examples/deno-oak/deps.ts @@ -0,0 +1 @@ +export * from "https://deno.land/x/oak@v9.0.1/mod.ts"; diff --git a/examples/deno-oak/dev_deps.ts b/examples/deno-oak/dev_deps.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/examples/deno-oak/dev_deps.ts @@ -0,0 +1 @@ +export {}; diff --git a/examples/deno-oak/src/index.ts b/examples/deno-oak/src/index.ts new file mode 100644 index 0000000..a149898 --- /dev/null +++ b/examples/deno-oak/src/index.ts @@ -0,0 +1,30 @@ +import { Application, Router } from "../deps.ts"; + +const app = new Application(); +const port = parseInt(Deno.env.get("PORT") ?? "8000"); + +// Router to serve specific functions on routes +const router = new Router(); + +// Route "ping" that responds with "Pong!" +router.get("/ping", ctx => { + ctx.response.body = "Pong!"; +}); + +// Example of dynamic routes +router.get("/hello/:name", ctx => { + ctx.response.body = `Hello ${ctx.params.name}!`; +}); + +// Apply routes +app.use(router.routes()); +app.use(router.allowedMethods()); + +// Basic example with a global route +// Applied last, so the router will take precedence +app.use(ctx => { + ctx.response.body = "Welcome to Railway!"; +}); + +console.log(`Listening on port ${port}...`); +await app.listen({ port: port });