Deploying a Node.js API to Heroku: 3 Examples

Learn how to deploy a Node.js API to Heroku with these three practical examples. Perfect for beginners!
By Taylor

Deploying your Node.js API to Heroku is a great way to showcase your project online. Heroku is a cloud platform that simplifies app deployment, making it accessible even for beginners. In this guide, I’ll walk you through three diverse examples of deploying a Node.js API to Heroku, each with its unique context and use case. Let’s jump in!

Example 1: Simple Todo List API

Context

Imagine you want to create a simple API that manages a list of tasks—think of it as a basic todo list application. This example shows you how to deploy a straightforward Node.js API that allows users to create, read, update, and delete tasks.

First, make sure you have Node.js and npm installed. Then, create a new folder for your project and initialize it:

mkdir todo-api
cd todo-api
npm init -y

Next, install the necessary packages:

npm install express body-parser cors

Now, create an index.js file and add the following code:

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();
const PORT = process.env.PORT || 3000;

app.use(cors());
app.use(bodyParser.json());

let tasks = [];

app.get('/tasks', (req, res) => {
  res.json(tasks);
});

app.post('/tasks', (req, res) => {
  tasks.push(req.body);
  res.status(201).json(req.body);
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

To deploy your API, follow these steps:

  1. Create a new app on Heroku: heroku create todo-api
  2. Add a Procfile with the following content: web: node index.js
  3. Initialize a Git repository: git init
  4. Add your files: git add .
  5. Commit your changes: git commit -m "Initial commit"
  6. Push your code to Heroku: git push heroku master
  7. Open your app: heroku open

Notes

You can test your API using tools like Postman or cURL. Additionally, you could use a database service like MongoDB Atlas for persistent storage instead of an in-memory array.

Example 2: Weather Forecast API

Context

Let’s say you want to build a weather forecast API that fetches data from an external weather service. This example illustrates how to create an API that retrieves weather data based on user input.

Start by creating a new project directory:

mkdir weather-api
cd weather-api
npm init -y

Install the necessary packages, including Axios for making HTTP requests:

npm install express axios cors

In your index.js, add the following code:

const express = require('express');
const axios = require('axios');
const cors = require('cors');

const app = express();
const PORT = process.env.PORT || 3000;

app.use(cors());

app.get('/weather/:city', async (req, res) => {
  const city = req.params.city;
  const apiKey = 'YOUR_API_KEY'; // Replace with your API key

  try {
    const response = await axios.get(`http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}`);
    res.json(response.data);
  } catch (error) {
    res.status(500).json({ error: 'Error fetching weather data' });
  }
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

To deploy this API:

  1. Create a new app on Heroku: heroku create weather-api
  2. Add a Procfile: web: node index.js
  3. Initialize Git repository: git init
  4. Add and commit your files: git add . followed by git commit -m "Initial commit"
  5. Push to Heroku: git push heroku master
  6. Open your app: heroku open

Notes

Make sure to sign up for a weather API key from OpenWeatherMap and replace YOUR_API_KEY in the code. You can enhance this API by adding more features like caching or user authentication.

Example 3: User Registration API

Context

In this example, let’s create a user registration API that allows users to sign up and store their data. This can be especially useful for applications that require user accounts.

Set up your project directory:

mkdir user-registration-api
cd user-registration-api
npm init -y

Install the required packages:

npm install express mongoose cors

Create your index.js file with the following code:

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');

const app = express();
const PORT = process.env.PORT || 3000;

mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/users', { useNewUrlParser: true, useUnifiedTopology: true });

const userSchema = new mongoose.Schema({
  username: { type: String, required: true },
  password: { type: String, required: true },
});

const User = mongoose.model('User', userSchema);

app.use(cors());
app.use(express.json());

app.post('/register', async (req, res) => {
  const user = new User(req.body);
  try {
    await user.save();
    res.status(201).json(user);
  } catch (error) {
    res.status(400).json({ error: 'Error registering user' });
  }
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

To deploy this user registration API:

  1. Create a new Heroku app: heroku create user-registration-api
  2. Set up your Procfile: web: node index.js
  3. Initialize a Git repository: git init
  4. Add and commit your changes: git add . and git commit -m "Initial commit"
  5. Push to Heroku: git push heroku master
  6. Open your app: heroku open

Notes

For this example, you’ll need to set up a MongoDB instance. You can use MongoDB Atlas for hosting your database remotely. Don’t forget to set your MONGODB_URI in Heroku config variables.

By following these examples, you should feel more confident in deploying your Node.js APIs to Heroku. Each example serves as a practical starting point for building and deploying your own applications. Happy coding!