Intro
We learned:
Now we want to learn how to connect our PostgreSQL database with our express server with pg
and no ORM.
Create A Project Folder, do npm init
, install express & pg
mkdir node-postgres-pg
cd node-postgres-pg
npm init
npm i express pg
Create index.js
and setup a small server
const express = require("express");
const app = express();
const PORT = 8080;
app.get("/", (req, res) => {
res.send({ message: "endpoint working" });
});
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
Test your server with node index.js
,
it should run at localhost:8080
Create a local database, table & entry
sudo -iu postgres
createdb -O postgres node-postgres-pg
psql -d node-postgres-pg
\conninfo
CREATE TABLE users(id SERIAL PRIMARY KEY, nickname TEXT NOT NULL);
INSERT INTO users(nickname) VALUES ('miku86');
Test your database with SELECT * FROM users;
,
there should be 1 row
.
Create database.js
with a generic query
const { Pool } = require("pg");
// your credentials
DATABASE_URL =
"postgres://[db-user]:[password]@127.0.0.1:5432/node-postgres-pg";
const pool = new Pool({
connectionString: DATABASE_URL,
});
// a generic query, that executes all queries you send to it
function query(text) {
return new Promise((resolve, reject) => {
pool
.query(text)
.then((res) => {
resolve(res);
})
.catch((err) => {
reject(err);
});
});
}
module.exports = {
query,
};
Note: This implementation is very simple and not for production. You should never move your credentials into this file, you should use something like dotenv
. You should also move the database config into a separate file. But for the sake of simplicity, I make this example as simple as possible.
Create User.js
with one method to read all database rows
const database = require("./database");
const User = {
async readAll(req, res) {
try {
const readAllQuery = "SELECT * FROM users";
const { rows } = await database.query(readAllQuery);
return res.send({ rows });
} catch (error) {
return res.send(error);
}
},
};
module.exports = User;
A User object, that has one method readAll()
.
This method sends a PostgreSQL query (SELECT * FROM users
) to the generic query in database.js
(we imported it at the top) and awaits the response, where it destructures the rows
and returns them.
Update index.js
with a new route
We now have to add the users
endpoint to index.js
.
const express = require("express");
// new: import User
const User = require("./User");
const app = express();
const PORT = 8080;
app.get("/", (req, res) => {
res.send({ message: "endpoint working" });
});
// new: route to users, that runs readAll()
app.get("/users", User.readAll);
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
Test your server with node index.js
,
it should run at localhost:8080/users and show all (= 1) rows from the PostgreSQL database.
Summary
In then end, we did these steps:
- created an express server
- created a database with one table and content
- created a method to read the content
- added a route that runs this method
To setup additional database queries, we only have to:
- add a new method in
User.js
with a new query (INSERT
,DELETE
etc.) - add a new route in
index.js
that runs the new method
Next Part
We will learn how to use an ORM.