Maison interface Web js tutoriel Comment résoudre le problème de chemin de nodejs

Comment résoudre le problème de chemin de nodejs

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

Cet article présente principalement la solution au problème du chemin nodejs. Le contenu est assez bon, je vais le partager avec vous maintenant et le donner comme référence.

Un projet de développement récent de l'entreprise utilisait nodejs comme backend. Au cours des deux derniers jours, j'avais besoin de l'emballer pour une démonstration client, j'ai donc demandé à un gars de l'entreprise de transplanter l'outil d'emballage de l'ancienne salle informatique 3D. Après l'empaquetage, j'ai constaté que le projet qui fonctionnait initialement bien dans l'environnement de développement n'était plus accessible. Il y a un problème qui empêche l'accès à la page d'accueil du projet :

impossible d'obtenir le fichier index.html

express .static

Quel est le problème ?

Le backend nodejs utilise express et index.html est un fichier statique. Nous savons que les fichiers statiques, tels que les images, les fichiers CSS, JavaScript, etc., peuvent être facilement hébergés via express.static intégré à Express.

Passer le répertoire où se trouvent les fichiers de ressources statiques en tant que paramètre au middleware express.static peut donner accès aux fichiers de ressources statiques. Par exemple, en supposant que les images, les fichiers CSS et JavaScript sont placés dans le répertoire public, vous pouvez utiliser le code suivant :

 app.use(express.static('public'));
Copier après la connexion
Copier après la connexion

Alors, trouvez le code dans le projet et vérifiez où l'appel statique est effectué , qui est très similaire à la ligne de code ci-dessus :

 app.use(express.static('public'));
Copier après la connexion
Copier après la connexion

À ce stade, j'ai découvert le problème, j'ai dit à mes amis que ce problème pouvait être résolu sans utiliser de chemins relatifs. En raison du temps limite pour faire mes bagages, j'ai demandé à mes amis de s'en occuper brièvement d'abord. Après avoir fait mes bagages, je ferai le tri dans mes pensées :

app.use(express.static('resource/public'));
Copier après la connexion

Bien sûr, le plus important est que ce problème soit. pas difficile, vous pouvez donc étudier davantage par vous-même, il est facile de trouver le problème, et ce problème ne se produira pas, alors mes amis, faites-le vous-même.

Eh bien, vous avez bien lu, cet endroit est toujours un annuaire relatif. Cela sera modifié pour une meilleure situation dans les produits ultérieurs.

Analyse de la méthode Express.static

En fait, si la méthode express.static passe dans un chemin relatif, express la convertira tout seul Pour un chemin absolu, nous pouvons vérifier le code source et trouver le code suivant dans express.js :

exports.static = require('serve-static');
Copier après la connexion

Description static appelle le package serve-static, trouvez directement ce package, vérifiez index.js, vous peut voir En ce qui concerne le code, les deux lignes importantes

 ...
var resolve = require('path').resolve
...
opts.root = resolve(root)
...
Copier après la connexion

sont répertoriées ci-dessous. Ces deux lignes sont le code pour express pour convertir le répertoire relatif en répertoire absolu. du chemin d'objet intégré est finalement utilisé.

Méthode de résolution de l'objet chemin

Consultez directement la documentation de l'API de cette méthode, comme suit : https://nodejs.org/api /path .html#path_path_resolve_paths

Voici une explication de cette méthode :

La méthode path.resolve() résout une séquence de chemins ou de segments de chemin dans un chemin absolu.

Qu'est-ce que cela signifie ? Cette méthode organise une série de chemins ou de segments de chemin en un chemin absolu, tel que

 path.resolve('/foo','bar');
// return /foo/bar
Copier après la connexion

Veuillez vous référer à la documentation pour des instructions détaillées. Il y a ici une phrase qui nécessite une attention particulière :
<🎜. >

Si après avoir traité tous les segments de chemin donnés, un chemin absolu n'a pas encore été généré, le répertoire de travail actuel est utilisé.


Qu'est-ce que cela signifie, c'est-à-dire : si tous les segments de chemin et un chemin absolu ne sont pas générés, le répertoire de travail actuel doit être utilisé. Par exemple :

 path.resolve(&#39;bar&#39;);
// 加上 /Users/terry 是当前工作目录, return /Users/terry/bar
Copier après la connexion
Un exemple plus complexe dans le document api (notez ici lors de la résolution, de droite à gauche, reportez-vous au document pour plus de détails) :

path.resolve(&#39;wwwroot&#39;, &#39;static_files/png/&#39;, &#39;../gif/image.gif&#39;);
// if the current working directory is /home/myself/node,
// this returns &#39;/home/myself/node/wwwroot/static_files/gif/image.gif&#39;
Copier après la connexion
Le courant problème Oui, quel est le répertoire de travail actuel.


répertoire de travail actuel de nodejs répertoire de travail actuel

nodejs Le répertoire de travail actuel est le répertoire dans lequel Node est démarré. En d’autres termes, quel que soit le répertoire à partir duquel vous entrez pour démarrer le nœud, il reviendra à ce répertoire.

Notez que ce répertoire ne fait pas référence au répertoire où se trouve le fichier js.


Le répertoire de travail actuel peut être obtenu via la méthode process.cwd().


Ce qui suit est un exemple pour présenter le répertoire de travail actuel. Si vous écrivez un fichier js, test.js, dans le répertoire /Users/terry/Documents/JSWorkspace, il n'y a qu'une seule ligne de. code :

console.log(process.cwd());
Copier après la connexion
Si à ce moment, exécutez la commande : node test.js dans le répertoire /Users/terry/Documents/JSWorkspace, le résultat est le suivant :

 /Users/terry/Documents/JSWorkspace
Copier après la connexion
Mais s'il se trouve dans le répertoire /Users/terry/Documents/ Exécutez la commande ci-dessous : node ./JSWorkspace/test.js Le résultat de sortie est :

/Users/terry/Documents
Copier après la connexion
Par conséquent, vous pouvez voir dans lequel. répertoire dans lequel vous exécutez la commande node et le répertoire actuel est ce répertoire.


Pour en revenir au problème de packaging précédent, puisque dans la phase de développement, la commande node est généralement exécutée directement dans le répertoire où se trouve le fichier js, il n'y a donc aucun problème pour écrire le répertoire relatif par rapport au répertoire du fichier js actuel.


Mais après packaging, l'exécution du nœud est placée dans la couche supérieure du répertoire js. À l'heure actuelle, le répertoire relatif "public" n'est plus relatif au fichier js, mais relatif à la couche précédente. Naturellement, ce dossier est introuvable, et donc le fichier index.html sous le dossier est introuvable.


Comment résoudre

Solution :

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 + &#39;/public&#39;));
Copier après la connexion

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

相关推荐:

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

如何在NodeJS项目中使用ES6

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La différence entre nodejs et vuejs La différence entre nodejs et vuejs Apr 21, 2024 am 04:17 AM

Node.js est un environnement d'exécution JavaScript côté serveur, tandis que Vue.js est un framework JavaScript côté client permettant de créer des interfaces utilisateur interactives. Node.js est utilisé pour le développement côté serveur, comme le développement d'API de service back-end et le traitement des données, tandis que Vue.js est utilisé pour le développement côté client, comme les applications monopage et les interfaces utilisateur réactives.

Nodejs est-il un framework backend ? Nodejs est-il un framework backend ? Apr 21, 2024 am 05:09 AM

Node.js peut être utilisé comme framework backend car il offre des fonctionnalités telles que des performances élevées, l'évolutivité, la prise en charge multiplateforme, un écosystème riche et une facilité de développement.

Comment connecter Nodejs à la base de données MySQL Comment connecter Nodejs à la base de données MySQL Apr 21, 2024 am 06:13 AM

Pour vous connecter à une base de données MySQL, vous devez suivre ces étapes : Installez le pilote mysql2. Utilisez mysql2.createConnection() pour créer un objet de connexion contenant l'adresse de l'hôte, le port, le nom d'utilisateur, le mot de passe et le nom de la base de données. Utilisez connection.query() pour effectuer des requêtes. Enfin, utilisez connection.end() pour mettre fin à la connexion.

Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Apr 21, 2024 am 05:18 AM

Il existe deux fichiers liés à npm dans le répertoire d'installation de Node.js : npm et npm.cmd. Les différences sont les suivantes : différentes extensions : npm est un fichier exécutable et npm.cmd est un raccourci de fenêtre de commande. Utilisateurs Windows : npm.cmd peut être utilisé à partir de l'invite de commande, npm ne peut être exécuté qu'à partir de la ligne de commande. Compatibilité : npm.cmd est spécifique aux systèmes Windows, npm est disponible multiplateforme. Recommandations d'utilisation : les utilisateurs Windows utilisent npm.cmd, les autres systèmes d'exploitation utilisent npm.

Quelles sont les variables globales dans nodejs Quelles sont les variables globales dans nodejs Apr 21, 2024 am 04:54 AM

Les variables globales suivantes existent dans Node.js : Objet global : global Module principal : processus, console, nécessiter Variables d'environnement d'exécution : __dirname, __filename, __line, __column Constantes : undefined, null, NaN, Infinity, -Infinity

Y a-t-il une grande différence entre nodejs et java ? Y a-t-il une grande différence entre nodejs et java ? Apr 21, 2024 am 06:12 AM

Les principales différences entre Node.js et Java résident dans la conception et les fonctionnalités : Piloté par les événements ou piloté par les threads : Node.js est piloté par les événements et Java est piloté par les threads. Monothread ou multithread : Node.js utilise une boucle d'événements monothread et Java utilise une architecture multithread. Environnement d'exécution : Node.js s'exécute sur le moteur JavaScript V8, tandis que Java s'exécute sur la JVM. Syntaxe : Node.js utilise la syntaxe JavaScript, tandis que Java utilise la syntaxe Java. Objectif : Node.js convient aux tâches gourmandes en E/S, tandis que Java convient aux applications de grande entreprise.

Nodejs est-il un langage de développement back-end ? Nodejs est-il un langage de développement back-end ? Apr 21, 2024 am 05:09 AM

Oui, Node.js est un langage de développement backend. Il est utilisé pour le développement back-end, notamment la gestion de la logique métier côté serveur, la gestion des connexions à la base de données et la fourniture d'API.

Comment déployer le projet nodejs sur le serveur Comment déployer le projet nodejs sur le serveur Apr 21, 2024 am 04:40 AM

Étapes de déploiement de serveur pour un projet Node.js : Préparez l'environnement de déploiement : obtenez l'accès au serveur, installez Node.js, configurez un référentiel Git. Créez l'application : utilisez npm run build pour générer du code et des dépendances déployables. Téléchargez le code sur le serveur : via Git ou File Transfer Protocol. Installer les dépendances : connectez-vous en SSH au serveur et installez les dépendances de l'application à l'aide de npm install. Démarrez l'application : utilisez une commande telle que node index.js pour démarrer l'application ou utilisez un gestionnaire de processus tel que pm2. Configurer un proxy inverse (facultatif) : utilisez un proxy inverse tel que Nginx ou Apache pour acheminer le trafic vers votre application

See all articles