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'));
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'));
À 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'));
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');
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) ...
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
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('bar'); // 加上 /Users/terry 是当前工作目录, return /Users/terry/bar
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'
répertoire de travail actuel de nodejs répertoire de travail actuel
console.log(process.cwd());
/Users/terry/Documents/JSWorkspace
/Users/terry/Documents
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 + '/public'));
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
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!