【问题标题】:NodeJS accessing file with relative path [duplicate]NodeJS使用相对路径访问文件[重复]
【发布时间】:2015-12-18 17:50:25
【问题描述】:

这似乎是一个直截了当的问题。但我无法破解这个。 在 helper1.js 中,我想访问 foobar.json(来自config/dev/

root
  -config
   --dev
    ---foobar.json
  -helpers
   --helper1.js

我无法让它工作fs: how do I locate a parent folder?

这里的任何帮助都会很棒。

【问题讨论】:

  • ..\config\dev\foobar.json
  • 如果您可以将 json 数据保存在 .js 文件中(而不是 .json)然后从 .js 文件中保存会更好 module.exports 它。 :)
  • @AdityaParab:如果您将 JSON 文件保存为 .json 而不是 .js,那么您不需要 module.export 它 - 您可以直接要求它。 JSON 文件会自动完全导出(或者换句话说,require() 支持 JSON 文件)
  • @slebetman js 文件更灵活,JSON 需要双引号,不允许 cmets 等。可以使用 JSON5 或其他类似格式,但是您需要一个库来读取它。 Js 还允许动态数据生成,例如从一个函数
  • 使用 .js 而不是 .json 文本文件的真正原因很容易解释:cmets... ;)

标签: node.js express fs


【解决方案1】:

您可以使用path 模块将helper1.js 所在目录的路径加入到foobar.json 的相对路径中。这将为您提供foobar.json 的绝对路径。

var fs = require('fs');
var path = require('path');

var jsonPath = path.join(__dirname, '..', 'config', 'dev', 'foobar.json');
var jsonString = fs.readFileSync(jsonPath, 'utf8');

这应该可以在采用 UTF8 编码的 Linux、OSX 和 Windows 上运行。

【讨论】:

  • 不用__dirname
  • @osrpt 最好使用__dirname,因为无论运行 helper1 脚本的上下文如何,路径都是正确的(例如,node helpers/helper1.js 将从根目录运行)。
  • 完美!我不是我们的路径,而是 __dirname + '/..'
【解决方案2】:

简单!名为.. 的文件夹是父文件夹,所以你可以这样设置你需要的文件的路径

var foobar = require('../config/dev/foobar.json');

如果你需要上两层,你可以写../../

this SO answer 中有关此的更多详细信息,它是 cmets

【讨论】:

  • 请在此处为您的代码添加一些解释。
  • 这仅适用于 json/js 文件。它不适用于其他类型的文件,例如 xml。更好的方法是 path.join()
  • 如果您从另一个文件夹调用文件,这不是一个很好的解决方案。如果您的结构是 src->utils->someUtilFile.js 并且还有第二个文件 src->logic->someLogic.js 并且您使用 ../../utils/someUtilFile.js 这将起作用。但是如果你从不同的结构目录调用 someUtilFile.js 这将不起作用。
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多