# NodeJS vs. Deno - A Simple Web Server (2021)

Some time ago, [Deno](https://deno.land/) was released into the wild. As a NodeJS enthusiast that I am it didn't took long before I read about it on several tech blogs and Twitter. 

%[https://twitter.com/deno_land/status/1260701643311583234]

But I naturally lost interest again, since at the time I didn't encounter any problems with NodeJS, which Deno could have helped me with. Also it was still early so I decided to let it grow before checking it out. 

So, fast forward one Corona Virus Epidemic, I am sitting in front of my perfectly fine NodeJS-Express-Server, wondering what would it take to re-create the exact same thing, not in NodeJS but in Deno ? 🤔 So let's `npm start` ...

> Oh btw, I won't go into detail about how to setup the one or the other, I'll jump directly into coding cause that's way more fun.  

## NodeJS

```js
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.status(200).send('ok'); 
}); 

app.listen(8080, () => {
  console.log('hello world on localhost:8080');
});
```
Nothing too fancy going on here. I am using a third-party dependency called `express`, which I notably need to install before I can use it, using `npm install express` in my project. Then I register a `GET` route endpoint on the `/` path and finally start listening on the `8080` port. I start the app with `node file.js`

## Deno

```js
import { opine } from "https://deno.land/x/opine@1.8.0/mod.ts";
const app = opine();

app.get('/', function (req, res) {
  res.setStatus(200).send('ok');
});

app.listen(8080, () => {
  console.log('hello world on localhost:8080')
});
```
Putting aside the fact that this example is like super simple, the only thing noticeable different here using Deno is the way I get the third party dependency in. I am importing `opine` (an ExpressJS equivalent for Deno) directly from an URL. That means I don't have to install this dependency beforehand. When I first start the app it downloads all needed deps so it takes a bit longer at first. 

### Other noticable differences

- At least in this quick example there is not much difference from the code side of things but it would only be fair to note that Deno comes with a built-in TypeScript compiler. That means I could use both, Javascript and TypeScript, out of the box. As with NodeJS there would be additional setup steps to support TypeScript. However I went with plain Javascript on both examples. 

- To run the app with NodeJS I just do `node file.js` and start using it. With Deno however I needed to use `deno run --allow-read=%cd% --allow-net file.ts`. That's because Deno comes with built-in security features. By default it is not allowed to breathe unless you tell it otherwise - like reading from file system or listening to a port.

- Maybe it's just me but I noticed that Deno, even if the deps already are downloaded, still takes longer to compile and start the app than NodeJS.

## Conclusion
For me and for now the only reason I would instantly switch to Deno would be if I want to create an app using TypeScript. I haven't actively used TypeScript in a project before so ... having it right there from the start is a big plus for me when using Deno. Until that's the case I probably stick with NodeJS. 

Thanks for reading ❤ 
