So verbessern Sie Ihren API-Service auf node.js. Teil 1

Beim Schreiben der API auf node.js ist jetzt eine angemessene Menge an Material verfügbar. Die meisten davon sind in Form von Tutorials und Demos in der Dokumentation enthalten. Dies reicht aus, um schnell etwas Eigenes herauszufinden und zu schreiben. Aber sie finden selten Details darüber, warum dies so gemacht wird. Einige Punkte sind der Einfachheit und Kürze halber ganz weggelassen.

Dieser Artikel soll einige Lücken schließen, die auftreten können, und letztendlich Ihren Service auf node.js verbessern.

PS Ich betrachte mich auf keinen Fall als Experte: Es gibt Raum zum Wachsen. Gleichzeitig gibt es aber etwas zu teilen.

Projektdateistruktur


Die Dateistruktur ist eine grundlegende, aber sehr wichtige Sache. Bei der Erstellung sollte die Möglichkeit einer Skalierung des Dienstes in Betracht gezogen werden. Aus diesem Grund lohnt es sich nicht, Dateien in der flachen Struktur eines Verzeichnisses abzulegen. Benötigen Sie eine Hierarchie, brauchen Sie Modularität.

Bei der Benennung von Verzeichnissen müssen Sie die festgelegten Standards einhalten. Dies wird Kollegen helfen und in wenigen Monaten schnell herausfinden, wo und was sich befindet.

Beispiel für eine Dateistruktur

src/
    controllers/
         users/
             index.js
         index.js
    db/
         mongo/
             index.js
         index.js
    helpers/
    middlewares/
         auth.js
    models/
         users.js
    routes/
        users/
             index.js
        index.js
    index.js

.eslintrc
.gitignore
README.md
...
package.json

Anmerkungen:

  1. Alle ausführbaren Dateien müssen sich in ./src befinden. Auf
    diese Weise können Sie die Quelldateien von kompiliertem Typoskript oder Babel trennen, die sich in ./dist oder ./build befinden.
    Dies erleichtert auch die Konfiguration von Lintern und anderen konfigurierbaren Tools, da sich die Zieldateien in einem separaten Verzeichnis befinden.

  2. Platzieren Sie alle Entitäten der Controller und Routen in separaten Verzeichnissen. Auf diese Weise können Sie beim Öffnen von ./routes oder ./controller nur eine index.js-Datei sehen, die Unterverzeichnis-Entitäten importiert und exportiert.
    Auf diese Weise können Sie schnell durch die vorhandenen Funktionen navigieren, da nur die Schnittstelle von Controllern oder Routern beschrieben wird, ohne auf deren Implementierung einzugehen.

Informationen zur Javascript-Kompilierung


Natürlich können Sie kein Babel oder Typoskript verwenden, um Ihr Javascript zu konvertieren. In der Regel landen neue ECMAScript-Standards schnell in node.js, und Sie können mit Ausnahme von browserbasiertem Javascript deren Unterstützung steuern.
Aber ich bin überzeugt, dass sie es wert sind, verwendet zu werden. Und deshalb:

  1. Die neueste Version von Node.js ist nicht immer für die Produktion verfügbar.
  2. Node.js (Version 13) hat immer noch Probleme mit der Unterstützung von ECMAScript-Modulen. Obwohl sie angezeigt wurden und die Flagge verlassen haben, sind sie immer noch experimentell. Früh verkaufen.

Erwägen Sie, dem Projekt Babel hinzuzufügen:

Installieren Sie die Abhängigkeiten:

npm install @babel/core @babel/node @babel/preset-env --save-dev

Fügen Sie die Konfigurationsdatei .babelrc zum Projektstamm hinzu
{
    "presets": [
      "@babel/preset-env"
    ]
}

Beispiel für eine Skriptausführung
"start": "nodemon --exec babel-node src/index.js",

Anmerkungen:

  1. Vergessen Sie bei der Installation von Abhängigkeiten nicht, den Schalter --save-dev (-D) nur während der Entwicklungsphase zu verwenden. Es ist zumindest für die Semantik notwendig.

Über die Notwendigkeit von Linter


Beginnen wir mit der offensichtlichen Tatsache: Linters werden benötigt. Wir schreiben Code, viel Code. So viel davon, dass sie selbst nicht in der Lage sind, seine Einheitlichkeit zu kontrollieren. Dieser Gegenstand ist in der Teamentwicklung unglaublich verbessert.

Und Einheitlichkeit ist der Schlüssel zur Lesbarkeit des Codes.

Es bleibt die Frage nach der Strenge des Liners. Die Auswahl sollte sich nach der Größe des Teams, seinem beruflichen Niveau und einem wichtigen Kriterium richten. Dies ist das Projekt selbst.

Hinzufügen eines einfachen Linter zum Projekt

Lassen Sie uns die Abhängigkeiten installieren:

npm install eslint --save-dev

Fügen Sie die .eslintrc-Konfigurationsdatei zum Projektstamm hinzu:

{
    "env": {
        "node": true,
        "es6": true,
    },
    "extends": "eslint:recommended"
}

Eine solche Konfiguration reicht in der Regel nicht aus. Erweitern Sie hier entweder die Regeln selbst oder sehen Sie sich die strengeren Optionen genauer an.

 ,  
...
    "extends": "eslint:recommended",
    "rules": {
        "quotes": ["error", "single"]
    }
}

Verwenden eines strengeren Linter

Es gibt mehrere gängige Konfigurationen, die auf denselben Styleguides basieren.

  • Google

     npm install --save-dev eslint-config-google
    
  • Airbnb

     npm install --save-dev eslint-config-airbnb-base eslint-plugin-import
    
  • Idiomatisch
     npm install --save-dev eslint-config-idiomatic
    

Dementsprechend muss .eslintrc korrigiert werden

{
    "env": {
        "node": true,
        "es6": true,
    },
    "extends": "google" | "airbnb-base" | "idiomatic"
}

Es ist auch erforderlich, den Start des Linter einem separaten Skript hinzuzufügen.

"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",
"lint:fix": "eslint ./src --fix && echo \"eslint: no lint errors\""

Informationen zum Start der Anwendung


Jeder, der Zugriff auf das Projekt-Repository hat, sollte es ausführen können. Ob er das kann und wie viel Zeit er dafür benötigt, ist eines Ihrer Projektqualitätskriterien.

Es ist wichtig, im Voraus zu dokumentieren, wie der Dienst Schritt für Schritt in der Datei README.md gestartet wird, und Befehle für die Hauptaktionen vorzuschreiben.

"start": "npm run dev",
"dev": "nodemon --exec babel-node ./src/index.js",
"build": "babel ./src --out-dir ./build",
"prod": "NODE_ENV=production node ./build/index.js",
"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",

Um die obigen Befehle verwenden zu können, müssen Sie möglicherweise die folgenden Pakete installieren:

npm install --save-dev @babel/cli nodemon babel-node

Hinweis:

  1. Wenn Sie package.json sogar die grundlegenden Befehle hinzugefügt haben, beschreiben Sie den Startvorgang dennoch in README.md.

Fazit


Ursprünglich wollte der Artikel viel mehr Empfehlungen zum Schreiben einer API auf node.js enthalten, aber ich möchte in 3-5 Minuten passen. Artikel lesen. Vorbehaltlich eines guten Feedbacks wird ein Follow-up veröffentlicht.

All Articles