获取nodejs中的路径

时间:2016-08-21 23:12:30

标签: javascript node.js

我的目录结构如下:

app/
   server/
         api/
            user/
                controller.js

  images/
    image1.jpeg

问题是在controller.js中读取image1.jpeg时我必须使用像

这样的字符串
var imagePath = __dirname + '/../../../images/images1.jpeg';
fs.readFile(imagePath, ()....

现在上面的作品很精细。但是我不喜欢的是这个字符串' /../../../'

有没有更好的方法来访问images /文件夹中的文件?

3 个答案:

答案 0 :(得分:1)

没有将app/images的路径传递给控制器​​,这与你能做的一样好。

您可以遍历module.parent引用,直到module.parent未设置,如果您可以安全地假设您的主脚本在哪里。例如,如果您的主脚本在app.jsapp/,则可以执行以下操作:

var path = require('path');
var topLevel = module;
while (topLevel.parent)
  topLevel = topLevel.parent;
topLevel = path.dirname(topLevel.filename);

var imagesBasePath = path.join(topLevel, 'images');

// ...

fs.readFile(path.join(imagesBasePath, 'images1.jpeg'), ...);

答案 1 :(得分:1)

您可以使用public static Quaternion transform(Quaternion q) { Quaternion a = new Quaternion(Vector3.Y, 90).multiply(q); Quaternion b = new Quaternion(a.w, a.y, -a.x, -a.z); return b.multiply(new Quaternion(Vector3.Y, 90)); } 。您可能希望将这些保存为常量,但您可以执行以下操作以使事物更具可读性。

将路径作为第一个参数传递到当前目录,并从同一个父目录(在本例中为app)传递到图像本身的路径,它将返回从当前目录到图像的相对路径。

path.relative

答案 2 :(得分:0)

我使用名为node-app-root-path的npm模块来帮助我管理NodeJS应用程序中的路径。

请参阅: https://github.com/inxilpro/node-app-root-path

要获取应用程序的根路径,您可以执行require('app-root-path');

示例:

global.appRoot = require('app-root-path');
var imagePath = global.appRoot.resolve('server/images');
var img1 = imagePath + '/image1.jpeg';

fs.readFile(img1, ()....

不确定是否是一个好主意但是在这种情况下我将appRoot存储为全局变量,这样它就可以在我的NodeJS应用程序堆栈中的任何地方使用,甚至可以用于我的其他一些NodeJs库

在他们的文档中还有许多其他用法,看看它是否对你有帮助。