Hello World

Introduction#

Deno is design to keeping web in mind. As Deno team mentioned. Deno is to

  • Provide Secure Defaults
  • Browser compatible
  • Be able to serve HTTP efficiently

hello

Deno provide standard package std/http for working with http/https server. This includes an HTTP client and an HTTP server. In this example i will show how simple it is, to create a webserver.

Import serve from http module#

import { serve } from "https://deno.land/std/http/server.ts";

Create a server instance to listen on port 8080#

import { serve } from "https://deno.land/std/http/server.ts";
const server = serve({ port: 8080 });

Create request handler#

examples/01_hello_world.ts
import { serve } from "https://deno.land/std/http/server.ts";
const PORT = 8080;
const server = serve({ port: PORT });
console.log(`Your server is running on http://localhost:${PORT}/`);
for await (const req of server) {
req.respond({ body: "Hello World\n" });
}

Run App:

denorun examples/01_hello_world.ts
#OR
deno run --allow-net --allow-read examples/01_hello_world.ts
note

In my first command i am using denorun. It is alias, created for dev environment. If you have't read my get started tutorial, I will recommend you to read it getting-started

Open browser at http://localhost:8080/. You will see hello world.

Breakdown:

When you create an instance of serve. It return an async generator server. We can wait forever client to connect using for-await loop. And respond to client using req.respond method. respond expects Response object.

for await (const req of server)

You can read more about async generator here.

allow-net

As mentioned earlier, Deno is build for security. By default network access is not allowed. You need to pass --allow-net as argument.

Respond a JSON#

When you respond a request, by default no header is assign to response. You need to set header to response a JSON object. Let's see in example.

examples/01_hello_world.ts
import { serve, Response } from "https://deno.land/std/http/server.ts";
const PORT = 8080;
const server = serve({ port: PORT });
for await (const req of server) {
const response: Response = {}; // Create a Response instance, init with {}
response.headers = new Headers(); // Create Headers object and assign to response
response.headers.set("content-type", "application/json"); // set header as json
const body = { message: "hello world" }; // Create response body
response.body = JSON.stringify(body); // Serialize to string bytes.
req.respond(response); // respond response
}

Run App:

denorun examples/01_hello_world.ts
#OR
deno run --allow-net --allow-read examples/01_hello_world.ts

Open browser at http://localhost:8080/. You will see {"message":"hello world"}.

Breakdown: The Response interface look like as below.

export interface Response {
status?: number;
headers?: Headers;
body?: Uint8Array | Reader | string;
trailers?: () => Promise<Headers> | Headers;
}

body can only accept Uint8Array | Reader | string. So we need to serialize the object to jSON string.

Read More:

You can go to https://deno.land/std/http to read more about http module