Et CRUD API administrerer data gjennom fire grunnleggende databaseoperasjoner: opprette, lese, oppdatere og slette. Du kan lage en enkel CRUD API med kun Express og en PostgreSQL-database.
Start med å lage en Express-server som du kobler PostgreSQL til. Deretter oppretter du CRUD-funksjonene og kobler dem til API-endepunkter. Når du har gjort det, vil du kunne koble Node til PostgreSQL og utføre databasespørringer på hver rute.
Forutsetninger for å bygge API
For å følge med på denne opplæringen, bør du:
- Installer Node på maskinen din.
- Installer PostgreSQL-serveren på maskinen din.
- Ha grunnleggende kunnskap om Express.js.
Opprett en ekspressserver
Til opprette en Express-server, begynn med å opprette en ny katalog og angi den:
mkdir notater
cd notater
Initialiser deretter npm:
npm init -y
Denne kommandoen vil generere en package.json filen i notatmappen. Til slutt, installer Express.
npm installere uttrykke
Opprett en ny fil kalt index.js og legg til følgende kode.
konst uttrykke = krever("uttrykke");
konst app = express();app.bruk(uttrykke.urlencoded({
forlenget: ekte
}));
app.bruk(uttrykke.json())
app.listen (3000, () => console.log("Lytter på port 3000"));
Dette vil opprette en ny server som lytter på port 3000.
Opprett en PostgreSQL-database
Utfør følgende kommando i psql-ledeteksten for å opprette en PostgreSQL-database kalt notedb.
postgres=# LAG DATABASE notedb;
Kjør denne kommandoen til liste opp alle Postgres-databasene og sjekk at du opprettet notedb-databasen:
postgres=# \l
Koble til databasen
Første ting først, koble Node-applikasjonen til PostgreSQL-serveren. Du kan bruke node-Postgres-modulen.
Kjør følgende for å installere den via npm:
npm installere s
Som god praksis, koble til databasen i en egen fil.
Opprett en ny fil kalt db.js og legg til følgende.
konst { Klient } = krever("pg");
konst { bruker, vert, database, passord, port } = krever("./dbConfig");konst klient = ny Klient({
bruker,
vert,
database,
passord,
havn,
});
klient.koble();
modul.eksport = klient;
Her eksporterer du tilkoblingsstrengen som du skal bruke til å kommunisere til databasen. Merk at du leser innstillingene for databasetilkobling fra en konfigurasjonsfil kalt dbConfig.js. Opprett derfor dbConfig.js og legg til følgende data til den.
modul.eksport = {
bruker: "{dbUser}",
vert: "{dbHost}",
database: "notertb",
passord: "{dbPassword}",
port: 5432,
};
Husk å erstatte databasedetaljene med dine egne lokale verdier.
Lag en PostgreSQL-tabell
I psql-ledeteksten oppretter du en tabell kalt notater. Til å begynne med, koble til notedb-databasen ved å bruke kommandoen \c.
postgres=# \c notertb
Deretter oppretter du en tabell i den tilkoblede databasen ved å bruke CREATE TABLE-kommandoen.
notertb=# LAG TABELL notater (
ID SERIEPRIMÆR NØKKEL,
merk VARCHAR(255)
);
Dette bordet er ganske enkelt. Den har bare en ID som er en autogenerert primærnøkkel og et tekstfelt kalt notat.
Lag et notat
I stedet for å utføre CRUD-operasjonene i rutene, lag funksjoner som vil samhandle med databasen i en egen fil.
Lag en hjelpefil kalt helper.js og importer tilkoblingsobjektet fra db.js.
konst klient = krever("./db");
Bruk følgende kode for å lage createNote()-funksjonen.
konst createNote = (req, res) => {
prøve {
konst { note } = req.body;if (!note) {
kasteFeil("Send notat i forespørselsorgan");
}
klient.spørsmål(
"SETT INNINN I notater (merknad) VERDIER ($1)",
[Merk],
(feil, data) => {
res.status(201).json({
feil: null,
beskjed: "Laget nytt notat",
});
}
);
} å fange (feil) {
res.status(500).json({
feil: feil.beskjed,
melding: "Kunnet ikke skapeny Merk",
});
}
};
Denne funksjonen sjekker først om forespørselsteksten inkluderte en merknad. Hvis notatet er fraværende, gir det en feil.
For å lage et notat bruker funksjonen INSERT-leddet. Den returnerer et JSON-objekt som inneholder en null-feilmelding og en suksessmelding hvis vellykket.
Få alle notater
For å få alle notatene fra tabellen, bruk SELECT *-leddet.
konst getNotes = (req, res) => {
prøve {
client.query("VELG * FRA notater", (feil, data) => {
hvis (feil) kaste feile;
res.status(200).json({
feil: null,
notater: data.rader,
});
});
} å fange (feil) {
res.status(500).json({
feil: feil.beskjed,
merknader: null,
});
}
};
getNotes() sender notes-matrisen i responsobjektet hvis spørringen er vellykket.
Få notat med ID
API-en vil også ha et endepunkt som returnerer et notat etter ID. I helper.js legger du til en getNoteById()-funksjon.
konst getNoteById = (req, res) => {
prøve {
konst { id } = req.params;
client.query("VELG * FRA notater WHERE id=$1", [id], (feil, data) => {
hvis (feil) kaste feile;
res.status(200).json({
feil: null,
Merk: data.rader[0],
});
});
} å fange (feil) {
res.status(500).json({
feil: feil.beskjed,
Merk: null,
});
}
};
Denne funksjonen vil returnere et JSON-objekt som inneholder notatet og et feilobjekt.
Oppdater notat etter ID
For å oppdatere et notat trenger du et notat og ID-en til det notatet. Du vil få notatet fra forespørselsteksten og ID-en fra URL-en.
UpdateNoteById()-funksjonen bruker UPDATE-leddet for å oppdatere et eksisterende notat med et nytt notat.
konst updateNoteById = (req, res) => {
prøve {
konst { id } = req.params;
konst { note } = req.body;
klient.spørsmål(
"OPPDATER notater SETT notat = $1HVORid = $2",
[merknad, id],
(feil, data) => {
hvis (feil) kaste feile;
res.status(201).json({
feil: null,
beskjed: "Oppdatert notat",
});
}
);
} å fange (feil) {
res.status(500).json({
feil: feil.beskjed,
beskjed: "Kunne ikke oppdatere notatet",
});
}
};
Denne funksjonen returnerer en suksessmelding hvis tabellen er oppdatert og en feilmelding hvis den ikke er det.
Slett notat etter ID
For å slette et notat etter ID fra tabellen, bruk følgende kode.
konst deleteNote = (req, res) => {
prøve {
konst { id } = req.params;
client.query("SLETT FRA notater WHERE id=$1", [id], (feil, data) => {
hvis (feil) kaste feile;
res.status(200).json({
feil: null,
beskjed: "Merknad slettet",
});
});
} å fange (feil) {
res.status(500).json({
feil: feil.beskjed,
beskjed: "Kunne ikke slette notatet",
});
}
};
Nå som du har opprettet alle CRUD-funksjonene, eksporter dem.
I helper.js legger du til følgende.
modul.eksport = { createNote, getNotes, getNoteById, updateNoteById, deleteNote };
Du vil importere dem inn index.js når du oppretter API-endepunktene.
Lag API-ruter
Det siste trinnet er å lage API-endepunkter i index.js for hver av CRUD-operasjonene.
Begynn med å importere helper.js-filen.
konst db = krever("./hjelper")
Deretter oppretter du hvert endepunkt.
app.get("/notes", db.getNotes);
app.get("/note/:id", db.getNoteById);
app.put("/note/:id", db.updateNoteById);
app.post("/note", db.createNote);
app.delete("/note/:id", db.deleteNote);
En REST API for å oppdatere databasen din
Når du er ferdig, kan du sjekke at API-en din fungerer ved å bruke en REST-klient som Postman, eller ved å skrive enhetstester. Du bør være i stand til å sikre at de fem endepunktene alle fungerer som du forventer.
Du kan også inspisere og administrere dataene du har lagt til databasen ved å bruke pgAdmin-verktøyet. Det er en GUI-applikasjon som gjør det enkelt å utføre databaseadministrasjon og samhandle med PostgreSQL-servere.