Inhaltsverzeichnis
JavaScript Essentials: Teil 7
Michael Otu ・ 2. November '24
Was ist eine API?
Michael Otu ・ 24.02.24
Was ist die REST-API?
Michael Otu ・ 9. März 2024
JavaScript Essentials: Teil 6 (Mastermind in Javascript)
Michael Otu ・ 28. Okt. 24
Was ist Nodejs?
Michael Otu ・ 31. Juli '24
Anfrage und Antwort
Was ist JSON?
Heim Web-Frontend js-Tutorial Grundlegende CRUD-API mit Express

Grundlegende CRUD-API mit Express

Jan 04, 2025 pm 10:38 PM

Inhalt

  • Einführung
  • Projekterstellung und -initialisierung
  • Erstellen Sie einen einfachen Server und eine GET-Route
  • Routen und Anforderungshandler
  • Anfrage und Antwort
  • Achten Sie auf Änderungen
  • Erstellen Sie POST-, GET-, UPDATE- und DELETE-Routen
  • API-Clients
  • Anforderungstext, Parameter, Abfrage, Header, ...
  • Speicherdaten manipulieren
  • Fazit

Einführung

Basic CRUD API with express

JavaScript Essentials: Teil 7

Michael Otu ・ 2. November '24

#javascript #api #Anfänger #Knoten

Basic CRUD API with express

Was ist eine API?

Michael Otu ・ 24.02.24

#javascript #Typoskript #Knoten #api

Basic CRUD API with express

Was ist die REST-API?

Michael Otu ・ 1. März '24

#javascript #Typoskript #Knoten #api

Basic CRUD API with express

JavaScript Essentials: Teil 6 (Mastermind in Javascript)

Michael Otu ・ 28. Okt. 24

#javascript #Anfänger #api #Knoten

Basic CRUD API with express

Was ist Nodejs?

Michael Otu ・ 31. Juli '24

#javascript #Typoskript #Knoten #api

Basic CRUD API with express

Anfrage und Antwort

Michael Otu ・ 14. März 2024

#javascript #Knoten #Programmierung #tutorial

Basic CRUD API with express

Was ist JSON?

Michael Otu ・ 9. März 2024

#javascript #Typoskript #Knoten #api

In JavaScript Essentials: Teil 7 habe ich angedeutet, dass wir uns mit der Entwicklung von APIs befassen würden ([0] [1]), und hier fangen wir an. Wir werden einen Vorgeschmack darauf bekommen, was nötig ist, um eine einfache API zur Verfolgung von Ausgaben zu entwickeln.

Projektbeschreibung

Für diesen Spesen-Tracker müssen wir den gekauften Artikel, den Betrag und das Kaufdatum des Artikels im Auge behalten. Eine Ausgabe sieht folgendermaßen aus:

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Da zu diesem Zeitpunkt noch keine echte Datenbank hinzugefügt wurde, können wir eine Liste (ein Array) verwenden, um die Daten zu speichern, die wir erstellen werden. In diesem Auszug gehen wir alle wichtigen Konzepte rund um die Erstellung von APIs durch und fügen später einige Möglichkeiten zur Verbesserung dieser App hinzu.

Wissen Sie, dass wir auf diesem Projekt aufbauen werden, also halten Sie es sauber und erkunden Sie, experimentieren Sie, tasten Sie herum usw., so viel Sie können.

Projekterstellung und -initialisierung

Wie üblich benötigen wir für jedes Projekt eine neue Arbeitsumgebung, daher beginnen wir mit der Erstellung und Initialisierung eines Node JS-Projekts. Wenn Sie sich nicht sicher sind, schauen Sie sich JavaScript Essentials: Teil 6 (Mastermind in Javascript) an.

Jetzt müssen wir den übergeordneten Ordner für unsere API erstellen, indem wir Folgendes tun:

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Alles, was wir mit diesem Skript machen, ist ziemlich direkt.

  • Wir erstellen einen Ordner für unser Projekt
  • Wir haben den Ordner in vscode geöffnet
  • Wir haben ein NodeJS-Projekt initialisiert
  • Wir haben ein Konsolenprotokoll zur Datei index.js hinzugefügt. Dadurch wird die Datei erstellt und einige Inhalte hinzugefügt
  • Wir führen die Datei index.js aus

Eine Alternative besteht darin, dorthin zu gehen, wo Sie diesen Ordner erstellen möchten, ihn dort zu erstellen und dann den Ordner in vscode zu öffnen und das Node-Projekt zu initieren – schauen Sie sich JavaScript Essentials: Teil 6 (Mastermind in Javascript) an.

Zu diesem Zeitpunkt müssen wir ein NodeJS-Paket namens Express installieren. Express ist eine Bibliothek, die uns bei der Erstellung unserer APIs hilft.

Wir können dieses Paket installieren, indem wir „npm i express“ ausführen. Dadurch sollte die Datei „package.json“ geändert und die Datei „package-lock.json“ und der Ordner „node_modules“ erstellt werden. Weitere Informationen und Informationen zur Verwendung von npm zum Installieren von Paketen finden Sie im Auszug „Was ist Nodejs“.

Erstellen Sie einen einfachen Server und eine GET-Route

In unserer index.js-Datei können wir diesen Code hinzufügen.

console.log("expense-tracker-simple-api");

// import the express lib
const express = require("express");

// create an express application
const app = express();

// create a GET request on the base endpoint
app.get("/", (req, res) => res.send("Hello world"));

// create a server that listens to requests on port 3000
app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Alles, was wir getan haben, war, eine Express-Anwendung zu erstellen, mit der Anwendung eine GET-Anfrage zum Senden einer Nachricht zu erstellen und die Anwendung Anfragen von Port 3000 abhören zu lassen.

const app = express();

Erstellt eine Express-Bewerbung (? So erstellen Sie eine Express-Bewerbung)

app.get("/", (req, res) => res.send("Hello world"));

Wir haben die Express-Anwendungsinstanz verwendet, um eine GET-Anfrage zu erstellen. app verfügt über mehrere Methoden und Eigenschaften, zu denen auch die HTTP-Methoden gehören. Sehen Sie sich hier die Ausnahmen zu http-Methoden an.

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Wir haben die Express-Anwendung verwendet, um einen Port abzuhören, und eine Pfeilfunktion verwendet, um uns und den Entwicklern mitzuteilen, dass unsere Anwendung ausgeführt wird. Den Port können wir in einen anderen Port unserer Wahl ändern. Einige spezielle Ports sind jedoch bereits für eine bestimmte Aufgabe gedacht oder werden verwendet, sind in der Community bekannt und dienen als Standardserver, wenn solche Anwendungen oder Programme auf unserem PC ausgeführt werden. Schauen Sie sich diese an – 0 1 2

Hinweis: Es gibt einige, die nicht funktionieren, weil Ihr System sie mitbringt, und andere, die mit von uns installierten Anwendungen geliefert werden, wie zum Beispiel einige Server und Datenbanken und andere. Machen Sie sich keine Sorgen, wenn wir einen Port verwenden, der bereits verwendet wird, werden wir von unserer Anwendung darüber informiert. Alles, was wir tun müssen, ist eins zu addieren oder eins zu subtrahieren. Kein Schweiß.

Routen und Anforderungshandler

Um eine GET-Anfrage zu erstellen, verwenden Sie app.get(...), für POST verwenden Sie app.post(...) und so weiter. Für jede Route, die wir erstellen möchten, nimmt app.SomeMethod(...) eine Route oder einen Pfad und gibt an, welche Ressource der Benutzer-Client wünscht oder welche Aktion er ausführen möchte. Als Teil der Route kann mindestens ein Request-Handler verwendet werden. Das bedeutet, dass wir app.SomeMethod(path, hanlder1, handler2, ..., handlern); haben können.

Für die obige GET-Anfrage ist der Pfad oder die Route / (eine Zeichenfolge) und der einzelne Anforderungshandler, den wir haben, ist (req, res) => res.send("Hello world"), eine Handlerfunktion (ein Rückruf oder eine einfache Pfeilfunktion). Die Anforderungshandler können Middleware und Controller sein.

Anfrage und Antwort

Ein Anforderungshandler akzeptiert normalerweise zwei Argumente, die Anforderung und die Antwort, die als req bzw. res abgekürzt werden (Sie müssen sie nicht so nennen, aber das erste ist immer Anforderung und das zweite ist die Antwort). Die Anfrage enthält die Daten (oder einige Informationen) darüber, wer die Anfrage gestellt hat und was sie wollen. Die Antwort ist ein Mittel, um dem Benutzer, der die Anfrage gestellt hat, Feedback zu geben. In diesem Fall senden wir „Hallo Welt“, wenn der Client eine GET-Anfrage an den /-Pfad stellt.

Hier fällt auf, dass Client und Benutzer austauschbar sind, d. h. welches Gerät die HTTP-Anfrage an unseren API-Server stellt und nicht ein Benutzer, wie bei einem Benutzerkonto.

Normalerweise akzeptiert der Anforderungshandler ein drittes Argument, das auf den nächsten Handler verweist, nachdem der vorherige Handler seine Aufgabe erledigt hat. Das nennen wir als nächstes. Es sieht mehr oder weniger so aus:

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Das nächste Argument ist nützlich, es zeigt auf den Request-Handler und akzeptiert manchmal ein Argument, einen Fehler. Wir werden einen Fehlerhandler implementieren, um im Allgemeinen Fehler zu behandeln, die wir nicht behandelt haben, oder Fehler, die wir an den nächsten Anforderungshandler „übergeben“.

Jetzt brechen wir den laufenden NodeJS-Prozess ab, der (im Terminal) ausgeführt wurde, indem wir die Steuerung c verwenden. Führen Sie es dann erneut aus. Diesmal sollten wir mit dem aktualisierten Inhalt aus dem Abschnitt Einfachen Server und eine GET-Route erstellen eine Ausgabe in der Konsole (Terminal) sehen, die etwa so aussieht:

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Öffnen Sie http://localhost:3000 im Browser. Was siehst du? Ein Text mit der Aufschrift Hallo Welt ?

Achten Sie auf Änderungen

Rom wurde nicht an einem Tag erbaut, wie das Sprichwort sagt. Gleiches gilt für die Softwareentwicklung. Vielleicht meinen wir damit, dass wir im Laufe der Entwicklung nach und nach weitere Funktionen hinzufügen werden und es in diesem kontinuierlichen Prozess irritierend wird, den Server ständig zu starten und zu stoppen.

Fahren Sie fort und fügen Sie eine weitere GET-Anfrage (Route) mit dem /hello-Pfad und einem Anfragehandler hinzu, der etwas sagt, was Sie sagen möchten. Sei glücklich.

Sie müssten den Server (den laufenden NodeJS-Prozess) neu starten und http://localhost:3000/hello im Browser aufrufen, um die Antwort von diesem Endpunkt zu sehen.

Dies,GET http://localhost:3000/hello, ist ein Endpunkt. Sie teilen dies mit API-Konsumenten. Unter uns sagen wir Route, weil wir nicht die gesamte URL kennen müssen (einschließlich Protokoll – http, Domain – localhost, Port – 3000, und Pfad - /hello). Route ist mehr oder weniger METHODENPFAD, GET /hello.

Unter macOS oder Windows können wir node --watch index.js ausführen oder mit node --watch-path=./ index nach Änderungen nicht nur in unserer Eintragsdatei, sondern im gesamten Ordnerpfad suchen. js, um auf Änderungen im Dateipfad und auch in der Datei selbst zu achten.

Derzeit ist dies der Inhalt meiner package.json-Datei:

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Wir können im Abschnitt „Skript“ ein Skript namens „dev“ hinzufügen.

console.log("expense-tracker-simple-api");

// import the express lib
const express = require("express");

// create an express application
const app = express();

// create a GET request on the base endpoint
app.get("/", (req, res) => res.send("Hello world"));

// create a server that listens to requests on port 3000
app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Wir können den laufenden Server mit Control C stoppen und nun npm run dev ausführen. Dadurch werden gespeicherte Änderungen in unseren Dateien überwacht und der Server neu geladen.

Wenn das also bei Ihnen nicht funktioniert, haben wir eine Alternative. Wir werden Nodemone, NPM und Nodemon -g installieren. Wir würden es überall als Hilfsprogramm verwenden, damit wir es nicht als Teil unserer Pakete installieren müssen. Wir können Änderungen beobachten, indem wir „nodemon index.js“ ausführen. Es gibt Fälle, in denen dies nicht funktioniert, und wenn nicht, dom nodemon --exec node index.js

Wir können unser Entwicklungsskript so ändern, dass es nodemon verwendet,

const app = express();

An diesem Punkt können Sie Ihre .js-Dateien frei ändern und beim Speichern wird der Server neu gestartet, um die angewendeten Laständerungen neu zu laden.

Erstellen Sie POST-, GET-, UPDATE- und DELETE-Routen

Wir haben bereits eine GET-Anfrage erstellt. In diesem Abschnitt werden wir uns kurz mit der Bedeutung der einzelnen Methoden befassen, da wir sie in „Anfrage und Antwort“ ausführlich besprochen haben.

In dieser Anwendung stellen wir unseren Kunden nur eine Art von Ressource zur Verfügung, und zwar Ausgaben. Angenommen, wir bedienen mehrere Ressourcen, dann würden wir Anfragen unter jeder Ressource gruppieren.

Angenommen, wir haben Benutzer und Ausgaben, wir haben GET, POST, PUT, DELETE usw. sowohl für Benutzer als auch für Ausgaben.

Im Moment würden wir die Route /expenditures verwenden, um die Ausgabenressource darzustellen.

  • GET: Dies bedeutet, dass wir eine Route erstellen, um die Aufzeichnungen, die wir über Ausgaben haben, aufzulisten, alle abzurufen, alle abzurufen usw. Wir können eine GET-Anfrage haben, die einen der Datensätze abruft. Wir haben ein ähnliches GET

  • erstellt
  • POST: Die Post-Methode wird häufig zum Erstellen von Ressourcen verwendet

  • PUT: Die Put-Methode wird zum Aktualisieren von Ressourcen verwendet

  • DELETE: Die Löschmethode wird zum Löschen einer Ressource verwendet

Jetzt können wir die folgenden Codezeilen zur Datei index.js hinzufügen, jedoch über app.listen(3000,...).

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Bemerken Sie beim Speichern Ihrer Datei die Protokolle im Terminal? Testen Sie die GET-Route für die Ausgabe im Browser.

Wir können die GET-Anfragen nur im Browser ausführen. Als nächstes werden wir API-Clients besprechen.

API-Clients

Ein API-Client ist in diesem Zusammenhang ein Tool, ein Programm oder eine Anwendung, die zur Interaktion (Nutzung, Integration oder Test) von APIs verwendet wird. Am häufigsten werden „Postman“, „Insomnia“, „Curl“ usw. verwendet.

In vscode und neben einigen anderen IDEs gibt es eine Erweiterung, die Erweiterungen für API-Clients bereitstellt. vscode verfügt übrigens über einige dieser Erweiterungen. Wir werden jedoch einen API-Client namens REST Client in Betracht ziehen. Für unseren Anwendungsfall wird es einfacher sein, Rest Client als solchen zu verwenden, keine Sorge. Wir sind abgesichert.

Hinweis: Die Verwendung von Postman oder einem anderen API-Client Ihrer Wahl ist in Ordnung

So verwenden Sie den REST-Client

  • Zuerst installieren Sie den REST-Client.
  • Wir erstellen eine HTTP-Anfrage, sodass wir eine Datei mit der Erweiterung .http oder .rest erstellen können – berühren Sie Expense-Tracker-API.http
  • In Expense-Tracker-API.http können wir unsere Anfrage definieren
  • Um eine GET-Anfrage zu erstellen, fügen Sie Folgendes zur .http-Datei hinzu
{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}
  • Der Endpunkt wird wie oben gezeigt übergeben. Stellen Sie für einen Beitrag eine Anfrage zur Aktualisierung des Endpunkts oder löschen Sie sie. Erinnern Sie sich an den Unterschied zwischen einem Endpunkt und einer Route?
  • Für eine Anfrage, die die Übergabe von Daten an die API erfordert, können wir die Daten als Teil der Route als Parameter oder als Zeichenfolgenabfrage oder im Hauptteil übergeben.
# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js
  • Content-Type: application/json ist ein Header-Schlüsselwert. Das bedeutet, dass Sie Header auf diese Weise mit Rest-Client übergeben.
  • Für den Anfragetext übergeben wir ihn als JSON-Objekt – zwischen den Headern und dem Text wird jedoch eine neue Zeile erwartet
  • Jede Anfrage kann durch drei Pfund- oder Aschezeichen, ###, getrennt werden. Am Ende von ### kann ein Text hinzugefügt werden, damit es wie ein Titel aussieht.
console.log("expense-tracker-simple-api");

// import the express lib
const express = require("express");

// create an express application
const app = express();

// create a GET request on the base endpoint
app.get("/", (req, res) => res.send("Hello world"));

// create a server that listens to requests on port 3000
app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Als Übung erstellen Sie die Anfrage für die Ausgabenendpunkte. Wenden Sie sich an uns, wenn Sie Schwierigkeiten haben. Wir haben noch mehr zu tun.

Anforderungstext, Parameter, Abfrage, Header

An dieser Stelle muss ich nicht betonen, dass wir JSON verwenden würden, um über den API-Client mit unserer API zu kommunizieren.

Wie bereits erwähnt, können wir Daten mithilfe des Textkörpers, des Headers oder der URL unserer Anfrage an unsere API übergeben. Wir haben gesehen, wie man Daten über den Anforderungstext und den Header weitergibt (wir werden uns ein anderes Mal mit der Weitergabe spezifischer Daten befassen). Überprüfen Sie die erstellte POST-Anfrage. Was wir nicht untersucht haben, ist, wie Daten als Teil der URL übergeben werden.

Angenommen, wir möchten eine Ausgabe mit der ID 4 lesen, können wir einen Parameter (als Teil der URL) als /expenditures/2 hinzufügen. Für die Anfrage, die diese Anforderung bearbeiten wird, verwenden wir /expenditures/:id, wobei :id sich auf die ID der Ausgabe bezieht. Angenommen, es ist etwas anderes als eine ID, sagen wir ein Name, dann würden wir :name tun. Express wird dies verarbeiten und uns die Möglichkeit geben, diesen Wert ohne großen Aufwand zu extrahieren.

Für eine Abfragezeichenfolge ist die Idee nun ähnlich wie bei Anforderungsparametern, sie kommt jedoch nach einer Frage, gefolgt von einem Schlüssel1=Wert1&Schlüssel2=Wert2...&SchlüsselN=WertN, wobei der Schlüssel die Kennung des von Ihnen eingegebenen Werts ist möchte passieren. Ein sehr direktes Beispiel ist die REST-Client-URL, https://marketplace.visualstudio.com/items?itemName=humao.rest-client. Das Fragezeichen markiert den Anfang der Abfragezeichenfolge und alles, was darauf folgt, ordnet einen Schlüssel einem Wert zu. Beispiel: ?itemName=humao.rest-client.

Es ist ein guter Zeitpunkt, alle Ihre API-Endpunkte zu testen und damit zu experimentieren.

Anforderungstext

Jetzt verarbeiten wir eine Anfrage, die Daten über den Anfragetext weitergibt – den POST-Endpunkt.

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Das Anforderungsobjekt hat eine Eigenschaft, einen Körper, und auf dieser Eigenschaft befinden sich die Werte, die wir im Anforderungskörper unserer Anfrage übergeben haben – req.body.

Dies ist die Anfrage, die ausgeführt wird.

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Dies ist unsere Endpunktimplementierung, die lediglich den Anforderungstext in der Konsole protokolliert.

console.log("expense-tracker-simple-api");

// import the express lib
const express = require("express");

// create an express application
const app = express();

// create a GET request on the base endpoint
app.get("/", (req, res) => res.send("Hello world"));

// create a server that listens to requests on port 3000
app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Was ist passiert? Wir erhielten die übliche Antwort, aber ... undefiniert wurde in der Konsole angemeldet. Nun, es bedeutet, dass alles in Ordnung ist, aber unser API-Server weiß nicht, dass er die eingehenden Daten als JSON analysieren soll. Erinnern Sie sich an JSON?

Fügen wir diese eine Zeile unter const app = express(); Das sollte die eingehenden Daten als JSON analysieren.

const app = express();

Jetzt testen wir den POST-Endpunkt noch einmal. Was hast du dieses Mal bekommen? Hast du etwas Ähnliches bekommen?

app.get("/", (req, res) => res.send("Hello world"));

Jetzt wissen Sie, wie Sie die Daten aus dem Körper erhalten. Destrukturieren Sie nun als Übung den Körper und übergeben Sie ein Objekt in der Antwort. Anstatt es also zu protokollieren, geben Sie es als Antwort zurück.

Anforderungsparameter

Wir erstellen einen neuen GET-Endpunkt, um eine Ausgabe anhand der ID zu lesen.

Dies wird unsere API-Anfrage sein:

app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Das Anforderungsobjekt verfügt über eine Eigenschaft, params, und auf dieser Eigenschaft befinden sich die Werte, die wir im Anforderungsparameter unserer Anforderung übergeben haben – req.params.

Jetzt wird die Umsetzung ähnlich sein wie bisher, aber etwas anders.

app.get("/", (req, res, next) => ...);

Wir können auch direkt auf die ID zugreifen. Ich hoffe, Sie haben bemerkt, dass der als Teil der Route übergebene :id-Schlüssel oder -Name mit dem Schlüssel im protokollierten Objekt übereinstimmt. Versuchen Sie, den Parameterschlüssel in der Route umzubenennen, und sehen Sie sich die protokollierte Ausgabe an.

Anfrage anfordern (Abfragezeichenfolge)

Für die Abfragezeichenfolgen gibt es eine Eigenschaft im Anforderungsobjekt, query, die die übergebenen Abfragezeichenfolgen offenlegt.

Um dies zu demonstrieren, wird eine Abfragezeichenfolge übergeben, um die zurückzugebenden Datensätze zu filtern. Dieser Endpunkt sollte ausreichen.

expense-tracker-simple-api
Api running on http://localhost:3000

Jetzt wird die Implementierung in etwa so aussehen:

{
  "name": "expense-tracker-simple-api",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.21.2"
  }
}

Führen Sie jetzt Ihre API aus und überprüfen Sie Ihre Protokolle. Experimentieren Sie damit.

Speicherdaten manipulieren

Zu diesem Zeitpunkt stellen wir noch keine Verbindung zu einer Datenbank her, sodass wir Daten aus dem Speicher bearbeiten müssen. Was wir tun wollen, ist ein Array zu erstellen, es zu dem Array hinzuzufügen, ein Element darin zu aktualisieren und ein Element zu entfernen. Es klingt machbar, das ist es, was wir tun werden.

Wir werden einige Änderungen an einigen zuvor geschriebenen Codes vornehmen. Sie können gerne auch Ihren Code ändern. Der endgültige Auszug wird am Ende geteilt.

In-Memory-Daten initialisieren

Lassen Sie uns unten ein Array von Ausgaben (Dummy-Daten) erstellen const express = require("express");

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

Ausgaben auflisten

Der aktuelle Endpunkt gibt nur eine Nachricht mit res.send(message) zurück, aber was wir zurückgeben möchten, ist JSON. Obwohl .send auch ein Objekt oder JSON aufnehmen kann, verwenden wir res.json(obj).

Ich habe es nicht erwähnt, aber der standardmäßig zurückgegebene Statuscode ist 200. Ist Ihnen das aufgefallen? Sofern kein weiterer Fehler auftritt oder ein Problem mit der Anfrage vorliegt, bleibt der Statuscode derselbe. Es gibt einen Abschnitt unter Statuscodes, schauen Sie durch.

Wir können den Statuscode ändern, indem wir den gewünschten Statuscode in res.status(desireStatusCode).json(obj) übergeben. Ich werde den Statuscode 200 durchgehend beibehalten.

Stellen Sie sicher, dass der Server noch läuft

Wir können die Ausgabenliste direkt übergeben.

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Wie war die Antwort? Überprüfen Sie den Statuscode sowie die Antwortnutzlast.

Aus Erfahrung und auch um Unklarheiten zu vermeiden, bevorzuge ich es, standardmäßig den Statuscode 200 zurückzugeben und entweder eine Erfolgseigenschaft, eine Nachricht oder eine Dateneigenschaft zu haben, um eine Nachricht oder eine angeforderte Ressource zurückzugeben. Standardmäßig wird die Nachricht weitergeleitet, wenn der Status „falsch“ ist. Andernfalls können Nachrichten oder Daten weitergeleitet werden.

console.log("expense-tracker-simple-api");

// import the express lib
const express = require("express");

// create an express application
const app = express();

// create a GET request on the base endpoint
app.get("/", (req, res) => res.send("Hello world"));

// create a server that listens to requests on port 3000
app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Wir müssen die ID (Index jeder Zeile) anzeigen

const app = express();

Filtern mit anwenden

app.get("/", (req, res) => res.send("Hello world"));

Warum wurde der Filter nach dem Mapping durchgeführt?

Ausgaben lesen

app.listen(3000, () =>
  console.log(`Api running on ${"http://localhost:3000"}`)
);

Gibt Ihnen diese Implementierung einen Hinweis darauf, Warum wurde der Filter nach der Zuordnung durchgeführt? ?

Ausgaben erstellen

app.get("/", (req, res, next) => ...);

Ausgaben aktualisieren

expense-tracker-simple-api
Api running on http://localhost:3000

Ausgaben löschen

{
  "name": "expense-tracker-simple-api",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.21.2"
  }
}

Abschluss

Wir haben die Wurzeln der meisten API-Entwicklungen abgedeckt. Dieses Projekt ist so einfach wie es nur sein kann. Entspannen Sie sich und schauen Sie noch einmal durch. Es gibt noch mehr zu prüfen, z. B.

  • Validierung
  • Authentifizierung und Autorisierung
  • Middleware
  • Fehlerbehandlung
  • SQL
  • Datenbankintegration

Übungsprojekt

crud api = erstellen, auflisten, lesen, aktualisieren und löschen. So gehen Sie diese Probleme an.

To-Do-Liste

  • todo-Objekt: { id: int, task: string, status: boolean }
  • rohe API
  • Fügen Sie einen Endpunkt hinzu, um alle Aufgaben als abgeschlossen zu markieren, Erfolg ist wahr oder nicht abgeschlossen

Rechner⁠

  • Sie müssen entscheiden, ob Sie einen Endpunkt für alle Operationen (Addition, Subtraktion, Multiplikation, Division) erstellen möchten
  • Oder Sie würden einen einzelnen Endpunkt mit unterschiedlichen Funktionen erstellen, die jedem Vorgang entsprechen. Der Benutzer sollte in der Lage sein, den Operator und die beiden Operanden zu übergeben

Währungsumrechner⁠
Sie konvertieren von einer Währung in eine andere. Tun Sie dies für so viele Währungen wie möglich (3 sind genug)

  • Einheitenrechner⁠ ⁠- Notizen-App⁠ ⁠- Persönlicher Blog⁠ ⁠- Quiz-App⁠

Ausschnitte

Wissen Sie, dass der Überschuss entfernt wurde.

{
    "name": "Legion Tower 7i Gen 8 (Intel) Gaming Desktop",
    "amount": 2099.99,
    "date": "2024-31-12"
}

API-Anfragen

# create a folder for the project at the path of your choice
mkdir expense-tracker-simple-api

# open the project with vscode
# code expense-tracker-simple-api
code -r expense-tracker-simple-api

# open the built-in terminal and init node
npm init -y
# this should create the package.json file

# create the entry file, index.js
echo "console.log(\"expense-tracker-simple-api\");" > index.js

# run the index.js file
node index.js

Das obige ist der detaillierte Inhalt vonGrundlegende CRUD-API mit Express. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Warum sollten Sie  Tags am Ende des  platzieren? Warum sollten Sie Tags am Ende des platzieren? Jul 02, 2025 am 01:22 AM

PlatztagsattheBottomofabogpostorwebpageServeSpracticalPurposesforseo, Usexperience und design.1ithelpswithseobyallowingEnginestoaccessKeyword-relevantTagswithoutClutteringHemainContent.2.

Wie arbeite man mit Daten und Zeiten in JS? Wie arbeite man mit Daten und Zeiten in JS? Jul 01, 2025 am 01:27 AM

Die folgenden Punkte sollten bei der Verarbeitung von Daten und Zeiten in JavaScript festgestellt werden: 1. Es gibt viele Möglichkeiten, Datumsobjekte zu erstellen. Es wird empfohlen, ISO -Format -Zeichenfolgen zu verwenden, um die Kompatibilität sicherzustellen. 2. Die Zeitinformationen erhalten und festlegen können und setzen Sie Methoden fest, und beachten Sie, dass der Monat mit 0 beginnt. 3. Die manuell formatierende Daten sind Zeichenfolgen erforderlich, und auch Bibliotheken von Drittanbietern können verwendet werden. 4. Es wird empfohlen, Bibliotheken zu verwenden, die Zeitzonen wie Luxon unterstützen. Das Beherrschen dieser wichtigen Punkte kann häufige Fehler effektiv vermeiden.

Was sprudelt und fängt Ereignis im Dom? Was sprudelt und fängt Ereignis im Dom? Jul 02, 2025 am 01:19 AM

Ereigniserfassung und Blase sind zwei Phasen der Ereignisausbreitung in DOM. Die Erfassung erfolgt von der oberen Schicht bis zum Zielelement, und die Blase ist vom Zielelement bis zur oberen Schicht. 1. Die Ereigniserfassung wird implementiert, indem der UseCapture -Parameter von AddEventListener auf true festgelegt wird. 2. Ereignisblase ist das Standardverhalten, Uscapture ist auf false oder weggelassen. 3. Die Ereignisausbreitung kann verwendet werden, um die Ereignisausbreitung zu verhindern. 4. Event Bubbling unterstützt die Ereignisdelegation, um die Effizienz der dynamischen Inhaltsverarbeitung zu verbessern. 5. Capture kann verwendet werden, um Ereignisse im Voraus abzufangen, wie z. B. Protokollierung oder Fehlerverarbeitung. Das Verständnis dieser beiden Phasen hilft dabei, das Timing und die Reaktion von JavaScript auf Benutzeroperationen genau zu steuern.

Wie funktioniert die Müllsammlung in JavaScript? Wie funktioniert die Müllsammlung in JavaScript? Jul 04, 2025 am 12:42 AM

Der Müllsammlung von JavaScript verwaltet den Speicher automatisch über einen Tag-Clearing-Algorithmus, um das Risiko eines Speicherlecks zu verringern. Der Motor durchquert und markiert das aktive Objekt aus dem Wurzelobjekt, und nicht markiert wird als Müll behandelt und gelöscht. Wenn das Objekt beispielsweise nicht mehr referenziert wird (z. B. die Variable nach NULL), wird es in der nächsten Runde des Recyclings freigegeben. Zu den häufigen Ursachen für Speicherlecks gehören: ① Ungeräte Timer oder Event -Hörer; ② Verweise auf externe Variablen in Schließungen; ③ Globale Variablen halten weiterhin eine große Datenmenge. Der V8 -Motor optimiert die Recyclingeffizienz durch Strategien wie Recycling von Generationen, inkrementelle Markierung, paralleles/gleichzeitiges Recycling und verkürzt die Hauptblockierungszeit. Während der Entwicklung sollten unnötige globale Referenzen vermieden und Objektverbände umgehend dekoriert werden, um die Leistung und Stabilität zu verbessern.

Wie stelle ich eine HTTP -Anforderung in node.js? Wie stelle ich eine HTTP -Anforderung in node.js? Jul 13, 2025 am 02:18 AM

Es gibt drei gängige Möglichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abhängigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengenähten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorgänge zu vereinfachen. 3.Node-Fetch bietet einen Stil ähnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

Eine endgültige JS -Zusammenfassung auf JavaScript -Modulen: ES -Module gegen CommonJs Eine endgültige JS -Zusammenfassung auf JavaScript -Modulen: ES -Module gegen CommonJs Jul 02, 2025 am 01:28 AM

Der Hauptunterschied zwischen ES -Modul und CommonJs ist das Lademethode und das Nutzungsszenario. 1.Kommonjs ist synchron geladen und für die node.js server-Seite-Umgebung geeignet. 2. Das Modul ist asynchron geladen und für Netzwerkumgebungen wie Browser geeignet. A. 4.Commonjs wird in alten Versionen von Node.js und Bibliotheken, die auf IT wie Express angewiesen sind, häufig verwendet, während ES-Module für moderne Front-End-Frameworks und Node.jsv14 geeignet sind; 5. Obwohl es gemischt werden kann, kann es leicht zu Problemen führen.

var vs let vs const: ein kurzer JS -Roundup Explarer var vs let vs const: ein kurzer JS -Roundup Explarer Jul 02, 2025 am 01:18 AM

Der Unterschied zwischen VaR, LET und CONT ist Geltungsbereich, Werbung und wiederholte Erklärungen. 1.VAR ist das Funktionsbereich mit variabler Werbung, die wiederholte Deklarationen ermöglicht. 2. Das Glied ist der Umfang auf Blockebene mit vorübergehenden toten Zonen, und wiederholte Erklärungen sind nicht zulässig. 3.Konst ist auch der Umfang auf Blockebene und muss sofort zugewiesen werden und kann nicht neu zugewiesen werden, aber der interne Wert des Referenztyps kann geändert werden. Verwenden Sie zuerst const, verwenden Sie LET, wenn Sie Variablen ändern, und vermeiden Sie die Verwendung von VAR.

Warum ist Dom Manipulation langsam und wie kann sie optimiert werden? Warum ist Dom Manipulation langsam und wie kann sie optimiert werden? Jul 01, 2025 am 01:28 AM

Die Hauptgründe für den langsamen Betrieb von DOM sind die hohen Kosten für die Umlagerung, die Neuausrichtung und den niedrigen Zugangseffizienz. Zu den Optimierungsmethoden gehören: 1. Reduzieren Sie die Anzahl der Zugriffe und Cache -Lesewerte; 2. Batch -Lesen und Schreibvorgänge; 3.. Zusammenführen und ändern, Dokumentfragmente oder verborgene Elemente verwenden; V. 5. Verwenden Sie Framework oder RequestAnimationFrame Asynchronous Update.

See all articles