Heim Web-Frontend js-Tutorial So lösen Sie das NodeJS-Pfadproblem

So lösen Sie das NodeJS-Pfadproblem

Jun 30, 2018 pm 03:13 PM
nodejs 路径

Dieser Artikel stellt hauptsächlich die Lösung des Nodejs-Pfadproblems vor. Der Inhalt ist ziemlich gut, ich werde ihn jetzt mit Ihnen teilen und als Referenz geben.

Ein aktuelles Entwicklungsprojekt des Unternehmens verwendete NodeJS als Backend. In den letzten zwei Tagen musste ich es für eine Kundendemonstration verpacken, also habe ich einen Mitarbeiter des Unternehmens gebeten, das Verpackungswerkzeug aus dem vorherigen 3D-Computerraum zu verpflanzen. Nach dem Packen stellte ich fest, dass auf das Projekt, das ursprünglich in der Entwicklungsumgebung gut lief, nicht mehr zugegriffen werden konnte. Es besteht das Problem, dass auf die Homepage des Projekts nicht zugegriffen werden kann:

Datei index.html kann nicht abgerufen werden

Express .static

Was ist das Problem?

Das NodeJS-Backend verwendet Express und index.html ist eine statische Datei. Wir wissen, dass statische Dateien wie Bilder, CSS, JavaScript-Dateien usw. problemlos über die integrierte express.static von Express gehostet werden können.

Die Übergabe des Verzeichnisses, in dem sich die statischen Ressourcendateien befinden, als Parameter an die express.static-Middleware kann Zugriff auf statische Ressourcendateien ermöglichen. Angenommen, Bilder, CSS- und JavaScript-Dateien werden im öffentlichen Verzeichnis abgelegt, können Sie den folgenden Code verwenden:

 app.use(express.static('public'));
Nach dem Login kopieren
Nach dem Login kopieren

Suchen Sie also den Code im Projekt und überprüfen Sie, wo static aufgerufen wird Ähnlich wie in der obigen Codezeile:

 app.use(express.static('public'));
Nach dem Login kopieren
Nach dem Login kopieren

An diesem Punkt habe ich das Problem entdeckt und meinen Freunden gesagt, dass dieses Problem ohne die Verwendung relativer Pfade gelöst werden kann. Aufgrund der Verpackungsfrist habe ich meine Freunde gebeten, sich zunächst kurz darum zu kümmern. Nachdem ich mit dem Verpacken fertig bin, werde ich meine Gedanken ordnen:

app.use(express.static('resource/public'));
Nach dem Login kopieren

Das Wichtigste ist natürlich, dass dieses Problem tatsächlich besteht Wenn Sie mehr alleine lernen, wird es sehr einfach sein, das Problem zu finden, also wird dieses Problem nicht auftreten, also machen Sie es bitte selbst.

Nun, Sie haben richtig gelesen, dieser Ort ist immer noch ein relatives Verzeichnis. Die Situation wird in späteren Produkten verbessert.

Express.static-Methodenanalyse

Wenn die express.static-Methode tatsächlich einen relativen Pfad übergibt, konvertiert Express sie selbst Für einen absoluten Pfad können wir den Quellcode überprüfen und den folgenden Code in express.js finden:

exports.static = require('serve-static');
Nach dem Login kopieren

Beschreibung static ruft das Serve-Static-Paket auf, finden Sie dieses Paket direkt, überprüfen Sie index.js, Sie können sehen Im Code sind die beiden wichtigen Zeilen

 ...
var resolve = require('path').resolve
...
opts.root = resolve(root)
...
Nach dem Login kopieren

aufgeführt. Diese beiden Zeilen sind der Code zum Konvertieren eines relativen Verzeichnisses in ein absolutes Verzeichnis. Es ist ersichtlich, dass es sich um die Auflösungsmethode des integrierten Objekts handelt Der Pfad wird letztendlich verwendet.

Methode des Pfadobjekts auflösen

Sehen Sie sich die API-Dokumentation dieser Methode direkt wie folgt an: https://nodejs.org/api /path .html#path_path_resolve_paths

Hier ist eine Erklärung dieser Methode:

Die Methode path.resolve() löst eine Folge von Pfaden oder Pfadsegmenten auf in einen absoluten Weg.

Was bedeutet das? Diese Methode organisiert eine Reihe von Pfaden oder Pfadsegmenten in einem absoluten Pfad, z. B.

 path.resolve('/foo','bar');
// return /foo/bar
Nach dem Login kopieren

Detaillierte Anweisungen finden Sie in der Dokumentation. Hier gibt es einen Satz, der besondere Aufmerksamkeit erfordert:

Wenn nach der Verarbeitung aller angegebenen Pfadsegmente noch kein absoluter Pfad generiert wurde, wird das aktuelle Arbeitsverzeichnis verwendet.

Was bedeutet es, wenn alle Pfadsegmente verarbeitet wurden und kein absoluter Pfad generiert wird, muss das aktuelle Arbeitsverzeichnis verwendet werden. Zum Beispiel:

 path.resolve('bar');
// 加上 /Users/terry 是当前工作目录, return /Users/terry/bar
Nach dem Login kopieren

Ein komplexeres Beispiel im API-Dokument (beachten Sie hier beim Auflösen, von rechts nach links, siehe Dokument für Details):

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// if the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'
Nach dem Login kopieren

Die Frage ist nun, was ist das aktuelle Arbeitsverzeichnis.

nodejs aktuelles Arbeitsverzeichnis aktuelles Arbeitsverzeichnis

nodejs Das aktuelle Arbeitsverzeichnis ist das Verzeichnis, in dem Node gestartet wird. Mit anderen Worten: Das Verzeichnis, von dem aus Sie den Startknoten betreten, kehrt zu diesem Verzeichnis zurück.

Beachten Sie, dass sich dieses Verzeichnis nicht auf das Verzeichnis bezieht, in dem sich die js-Datei befindet.

Das aktuelle Arbeitsverzeichnis kann über die Methode „process.cwd()“ abgerufen werden.

Das Folgende ist ein Beispiel zur Einführung des aktuellen Arbeitsverzeichnisses. Wenn Sie eine js-Datei, test.js, im Verzeichnis /Users/terry/Documents/JSWorkspace schreiben, gibt es nur eine Zeile Code:

console.log(process.cwd());
Nach dem Login kopieren

Wenn Sie zu diesem Zeitpunkt den Befehl im Verzeichnis /Users/terry/Documents/JSWorkspace: node test.js ausführen, lautet die Ausgabe wie folgt:

 /Users/terry/Documents/JSWorkspace
Nach dem Login kopieren

Aber wenn Sie führen den Befehl im Verzeichnis /Users/terry/Documents/ aus: Knoten ./JSWorkspace/test.js. Das Ausgabeergebnis lautet:

/Users/terry/Documents
Nach dem Login kopieren

Daher können Sie sehen, in welchem ​​Verzeichnis Sie den Knotenbefehl ausführen. und das aktuelle Verzeichnis ist dieses Verzeichnis.

Zurück zum vorherigen Verpackungsproblem, da in der Entwicklungsphase der Knotenbefehl im Allgemeinen direkt in dem Verzeichnis ausgeführt wird, in dem sich die js-Datei befindet, sodass das Schreiben des relativen Verzeichnisses relativ kein Problem darstellt in das Verzeichnis der aktuellen js-Datei.

Aber nach dem Packen wird die Ausführung des Knotens in der oberen Ebene des js-Verzeichnisses platziert. Zu diesem Zeitpunkt ist das relative Verzeichnis „public“ nicht mehr relativ zur js-Datei, sondern relativ zur vorherigen Ebene. Dieser Ordner kann daher nicht gefunden werden, und daher kann die Datei index.html nicht gefunden werden.

So lösen Sie

Lösung:

1.在前面已经说过了,改这个相对目录。但这种方法很蹩脚。因为,启动node命令的目录可能会变;而是如果这应该,开发阶段的node命令执行也需要跟着改。 总之不是兼容性很好的方法。

2.直接使用绝对路径。 但是这个绝对路径在不同的机器上又不一样,该如何解决呢?可以考虑使用全局变量__dirname.

全局变量__dirname

查看api文档 https://nodejs.org/api/modules.html#modules_dirname

看到解释如下:

The directory name of the current module. This is the same as the path.dirname() of the __filename。

啥意思呢,及时返回nodejs 的js文件的所在目录。

有了这个变量之后,我们就可以用如下代码解决这个问题。

app.use(express.static(__dirname + '/public'));
Nach dem Login kopieren

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Node.js中路径处理模块path的介绍

如何在NodeJS项目中使用ES6

Das obige ist der detaillierte Inhalt vonSo lösen Sie das NodeJS-Pfadproblem. 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

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.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

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)

Der Unterschied zwischen NodeJS und VueJS Der Unterschied zwischen NodeJS und VueJS Apr 21, 2024 am 04:17 AM

Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Ist NodeJS ein Backend-Framework? Ist NodeJS ein Backend-Framework? Apr 21, 2024 am 05:09 AM

Node.js kann als Backend-Framework verwendet werden, da es Funktionen wie hohe Leistung, Skalierbarkeit, plattformübergreifende Unterstützung, ein umfangreiches Ökosystem und einfache Entwicklung bietet.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Apr 21, 2024 am 05:18 AM

Es gibt zwei npm-bezogene Dateien im Node.js-Installationsverzeichnis: npm und npm.cmd. Die Unterschiede sind wie folgt: unterschiedliche Erweiterungen: npm ist eine ausführbare Datei und npm.cmd ist eine Befehlsfensterverknüpfung. Windows-Benutzer: npm.cmd kann über die Eingabeaufforderung verwendet werden, npm kann nur über die Befehlszeile ausgeführt werden. Kompatibilität: npm.cmd ist spezifisch für Windows-Systeme, npm ist plattformübergreifend verfügbar. Nutzungsempfehlungen: Windows-Benutzer verwenden npm.cmd, andere Betriebssysteme verwenden npm.

Was sind die globalen Variablen in NodeJS? Was sind die globalen Variablen in NodeJS? Apr 21, 2024 am 04:54 AM

Die folgenden globalen Variablen sind in Node.js vorhanden: Globales Objekt: global Kernmodul: Prozess, Konsole, erforderlich Laufzeitumgebungsvariablen: __dirname, __filename, __line, __column Konstanten: undefiniert, null, NaN, Infinity, -Infinity

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

Ist NodeJS eine Back-End-Entwicklungssprache? Ist NodeJS eine Back-End-Entwicklungssprache? Apr 21, 2024 am 05:09 AM

Ja, Node.js ist eine Backend-Entwicklungssprache. Es wird für die Back-End-Entwicklung verwendet, einschließlich der Handhabung serverseitiger Geschäftslogik, der Verwaltung von Datenbankverbindungen und der Bereitstellung von APIs.

So stellen Sie das NodeJS-Projekt auf dem Server bereit So stellen Sie das NodeJS-Projekt auf dem Server bereit Apr 21, 2024 am 04:40 AM

Serverbereitstellungsschritte für ein Node.js-Projekt: Bereiten Sie die Bereitstellungsumgebung vor: Erhalten Sie Serverzugriff, installieren Sie Node.js, richten Sie ein Git-Repository ein. Erstellen Sie die Anwendung: Verwenden Sie npm run build, um bereitstellbaren Code und Abhängigkeiten zu generieren. Code auf den Server hochladen: über Git oder File Transfer Protocol. Abhängigkeiten installieren: Stellen Sie eine SSH-Verbindung zum Server her und installieren Sie Anwendungsabhängigkeiten mit npm install. Starten Sie die Anwendung: Verwenden Sie einen Befehl wie node index.js, um die Anwendung zu starten, oder verwenden Sie einen Prozessmanager wie pm2. Konfigurieren Sie einen Reverse-Proxy (optional): Verwenden Sie einen Reverse-Proxy wie Nginx oder Apache, um den Datenverkehr an Ihre Anwendung weiterzuleiten

See all articles