Node.js - 获取 routes.js 的目录

Node.js - get directory of routes.js

我的 server.js 文件位于目录:/dir1 我用节点 server.js.

启动服务器

我的文件 routes.js 在目录 /dir1/app/ 中。

我想获取server.js文件的目录。

我不太清楚该怎么做。我可以放置告诉我当前脚本位置的代码。但是现在的脚本是什么?

网络应用程序使用多个文件。那么我如何获得 server.js 的目录?

编辑:这是一个代码示例:

// routes.js
const spawn   = require('child_process').spawn;
const fs      = require('fs');


module.exports = function(app)
{

    //the file upload button does a POST the the '/' route
    //i left the arrow function notation for reference
    app.post('/', (req, res) => {
        if (req.files)
        {
            var pathAndFileName = '/home/user1/Desktop/app/dataLocation/'+fileName;

如您所见,pathAndFileName 是硬编码的。 它适用于我的系统,但不适用于所有系统。

所以我想获取 server.js 文件的位置(在 /dir1 中),在 app.js 文件中,这样我就可以追加到目录'/dataLocation' + fileName.

如果 routes.js 在:

/home/user1/Desktop/app/dir1

而且,server.js 在:

/home/user1/Desktop/app

然后,您要访问的文件位于:

/home/user1/Desktop/app/dataLocation

然后,从routes.js,你可以这样得到server.js的目录:

const serverjsDir = path.join(__dirname, "..");   // go up one level

或者,您可以获得您的编辑似乎正在寻找的整个路径(在 server.js 所在的 dataLocation 子目录中):

 const pathAndFileName = path.join(__dirname, '../dataLocation', fileName).

更多详情

如果您使用的是 CommonJS 模块(使用 require()),那么您可以使用 __dirname 获取当前脚本的目录,然后由您决定其他资源的相对位置您自己的目录,以便您可以从 __dirname 向上或向下导航目录层次结构。例如,如果您想要访问与您的脚本文件处于同一目录级别的另一个目录中的文件 main.css,您可以这样构造路径:

let filePath = path.join(__dirname, "../css/main.css");

But what is the current script?

当前脚本是包含正在访问__dirname的代码的脚本。

A web app makes use of multiple files. Since the place where i want to embed the location (in its code) is located inside routes.js, i guess this is where is should target, am i correct?

我不清楚你在这里的意思。如果您可以提供一个具体示例来说明位于哪个目录中的哪些代码想要访问位于其他目录中的哪个文件,那么我们可以为您提供获取该文件的精确代码。

如果要访问此其他文件的代码在 routes.js 中,那么 routes.js 的位置将在 __dirname 中,您将从该位置构建一个相对路径如上图

为了帮助您理解,__dirname 不是全局变量。它是一个特定于模块的变量,包含项目中每个模块位置的不同值。因此,任何模块中的任何代码 运行 都可以访问它自己的 __dirname 副本,该副本指定该特定代码的位置。

要获得访问权限 routes.js,如果它是一个模块,我假设您正在使用 Import 或 Require,并且您可以使用 require(./app/routes);

如果要返回目录,可以根据需要多次使用 ../。如果这不是您要找的答案,请回复或其他人可能会回答