Building an Express App with an HTTPS Server
Tags: webdev, javascript, beginners, tutorial
Published: 2023-07-14 08:46:33

## Building an Express App with an HTTPS Server

In this tutorial, we will walk through the process of building a basic Express application with an HTTPS server. The code provided will enable you to run your application over a secure HTTPS connection, allowing for encrypted communication between the client and the server.

## Prerequisites
To follow along with this tutorial, you should have a basic understanding of Node.js and Express.js. Make sure you have Node.js and npm (Node Package Manager) installed on your machine.

## Setting up the Project
1. Start by creating a new directory for your project and navigate into it using the command line.

2. Initialize a new Node.js project by running the following command:

>npm init -y

This will create a new `package.json` file for your project.

3. Install the required dependencies by running the following command:

>npm i express dotenv morgan

This will install the necessary packages: `express`, `dotenv`, and `morgan`.

## Writing the Code
Create a new file named `index.js` and open it in a text editor. Copy the following code into the file:

```javascript
const express = require("express");
const dotenv = require("dotenv").config();
const https = require("https");
const fs = require("fs");
const path = require("path");

const app = express();
const morgan = require("morgan");
const port = process.env.PORT || 4500;

// Middleware
app.use(morgan("dev"));

// Routes
app.get("/", (req, res) => {
  res.send("WELCOME TO THE BASIC EXPRESS APP WITH AN HTTPS SERVER");
});

// Read SSL certificate and key files
const options = {
  key: fs.readFileSync(path.join(__dirname, "localhost-key.pem")),
  cert: fs.readFileSync(path.join(__dirname, "localhost.pem")),
};

// Create HTTPS server
const server = https.createServer(options, app);

server.listen(port, () => {
  console.log(`App listening on https://localhost:${port}`);
});
```
## Now let's go through the code and understand each section:

*  We import the necessary modules: `express`, `dotenv`, `https`, `fs`, `path`, and `morgan`.
* An instance of the Express app is created using express`()`.
* We set up the middleware using `morgan` for logging our requests.
* A single route is defined for the root URL ("/") to send a welcome message.
* The SSL certificate and key files (`localhost-key.pem` and `localhost.pem`) are read using the `fs.readFileSync()` method. Make sure these files are present in the same directory as the `index.js` file or adjust the file paths accordingly.
* An options object is created with the key and certificate, which will be used to create the HTTPS server.
* Finally, the HTTPS server is created using `https.createServer()` and listens on the specified port.

### Now To The Very Important Part 
Generating our localhost-key.pem and localhost.pem. We use this commands on our terminals in the same directory as the index.js file 

>openssl genrsa -out localhost-key.pem 2048

>openssl req -new -x509 -sha256 -key localhost-key.pem -out localhost.pem -days 365

######And that's it, start your server and listen on the port you've choosen.
![image](https://media.giphy.com/media/NXp9HM6YeuS0U/giphy.gif)
Do not forget to create a .env file and add your PORT