Featured image of post How to Build a REST API with Express and PostgreSQL

How to Build a REST API with Express and PostgreSQL

Learn how to build a REST API with Express and PostgreSQL. This guide covers setting up your environment, creating the server, and handling CRUD operations.

Building a REST API with Express and PostgreSQL is a powerful way to create scalable and efficient web applications. In this guide, we will walk you through the process of setting up a REST API using Node.js, Express, and PostgreSQL. This tutorial is perfect for developers looking to integrate their backend with a robust database.

Setting Up Your Environment

To set up your environment for building a REST API with Express and PostgreSQL, you need to install the necessary tools. Here are the steps for each operating system:

Windows

1. Install Node.js

Download the Node.js installer from the official Node.js website. Run the downloaded .msi installer and follow the prompts to install Node.js. Update your version of npm by running npm install npm --global command in your CMD. 2. Install PostgreSQL:

Download the PostgreSQL installer from the official PostgreSQL website. Run the installer and follow the prompts to install PostgreSQL, create a new database and user:

1
2
3
4
5
psql -U postgres -c "CREATE DATABASE mydatabase;"
psql -U postgres -c "CREATE ROLE myuser WITH PASSWORD 'mypassword';"
psql -U postgres -c "ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';"
psql -U postgres -c "ALTER ROLE myuser SET default_transaction_deferrable TO 'off';"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;"

Linux

1. Install Node.js:

Install Node.js using a package manager like apt or yum:

1
2
sudo apt-get update
sudo apt-get install nodejs

2. Install PostgreSQL:

Install PostgreSQL using a package manager like apt or yum:

1
2
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

After the installation is done, run the following commands on you terminal.

1
2
3
4
5
sudo -u postgres psql -c "CREATE DATABASE mydatabase;"
sudo -u postgres psql -c "CREATE ROLE myuser WITH PASSWORD 'mypassword';"
sudo -u postgres psql -c "ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';"
sudo -u postgres psql -c "ALTER ROLE myuser SET default_transaction_deferrable TO 'off';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;"

macOS

1. Install Node.js: Install Node.js using Homebrew by running brew install node in your console.

2. Install PostgreSQL: Install PostgreSQL using Homebrew using brew install postgresql in your console and run the following command to create a new database and user.

1
2
3
4
5
psql -U postgres -c "CREATE DATABASE mydatabase;"
psql -U postgres -c "CREATE ROLE myuser WITH PASSWORD 'mypassword';"
psql -U postgres -c "ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';"
psql -U postgres -c "ALTER ROLE myuser SET default_transaction_deferrable TO 'off';"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;"

By following these steps, you will have all the necessary tools installed on your Windows, Linux, and macOS environments to build a REST API with Express and PostgreSQL.

Creating the REST API

Setting Up the Project Structure

Create a new directory for your project and initialize it with npm.

1
2
3
mkdir rest-api-example
cd rest-api-example
npm init -y

Installing Dependencies

Install Express and PostgreSQL dependencies.

1
npm install express pg

Creating the Server

Create a new file named server.js and add the following code to set up the server.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const express = require('express');
const { Pool } = require('pg');

const app = express();
const pool = new Pool({
  user: 'myuser',
  host: 'localhost',
  database: 'mydatabase',
  password: 'mypassword',
  port: 5432,
});

// Middleware to parse JSON requests
app.use(express.json());

// Define routes for CRUD operations
app.get('/api/users', async (req, res) => {
  try {
    const result = await pool.query('SELECT * FROM users');
    res.json(result.rows);
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Error fetching users' });
  }
});

app.post('/api/users', async (req, res) => {
  try {
    const { name, email } = req.body;
    const result = await pool.query('INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *', [name, email]);
    res.json(result.rows[0]);
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Error creating user' });
  }
});

app.put('/api/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const { name, email } = req.body;
    const result = await pool.query('UPDATE users SET name = $1, email = $2 WHERE id = $3 RETURNING *', [name, email, id]);
    res.json(result.rows[0]);
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Error updating user' });
  }
});

app.delete('/api/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const result = await pool.query('DELETE FROM users WHERE id = $1', [id]);
    res.json({ message: 'User deleted successfully' });
  } catch (err) {
    console.error(err);
    res.status(500).json({ message: 'Error deleting user' });
  }
});

// Start the server
const PORT = 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Running the Server

Start the server by running the following command in your terminal.

1
node server.js

Your REST API is now up and running. You can test it using tools like Postman or cURL.

Conclusion

In this guide, we have covered the basics of building a REST API with Express and PostgreSQL. This setup provides a robust foundation for your web applications. Remember to always follow best practices for security and scalability as you continue to develop your project.

You can find related articles about Node.js: