【问题标题】:How to locate the right path for a .js file when using require使用 require 时如何找到 .js 文件的正确路径
【发布时间】:2017-03-25 00:34:48
【问题描述】:

我有一个 ExpressJS 项目,我想在另一个项目中使用 .js 模块。我使用 require 来获取 .js 模块,但由于路径不正确,它找不到该模块。如何查看或找到本地模块的正确路径。

这是我的项目层次结构/结构

这是我在 programController.js 中尝试过的 - 另一件事是我不太理解使用“。”在路径字符串中。

var Program = require('.././program.js');
var FinishProgram = require('.././finishProgram');

【问题讨论】:

  • 在您的示例中为../../models/program。但是当你开始使用这样的路径时,它并不好。我倾向于使用我自己的应用程序 node_modules。

标签: javascript node.js express path require


【解决方案1】:

路径中的. and .. notation 表示路径相对到需要它们的文件。

... 通配符的含义

. - 在此文件所在的同一目录中(也称为当前工作目录)

.. - 在当前目录的父目录内

当您一起使用这些的倍数时,它会创建一个相对路径模式。所以programController.js 访问program.js 你的路径应该是

var Program = require('../../models/program');

这个路径的意思是,上2个文件夹到App目录,找到models文件夹,然后加载文件program.js

按照同样的规则,你也可以访问finishProgram.js

var FinishProgram = require('../../models/finishProgram');

【讨论】:

  • 感谢您的回答@peteb,它有效!但我无法弄清楚这个路径字符串是如何工作的。在 app_server -> routes -> route.js 我需要来自 app_server -> controllers -> .js 的所有控制器 - require 应该是什么样子?
  • 您是要求将所有这些都放在一个 require 中,还是要为每个要包含的控制器文件执行 1 个 require
  • 1 需要在 route.js 文件中的每个控制器
  • 你的require 想要这样的var controller = require('../controllers/controller.js); 你只需要一个.. 因为控制器和路由都位于同一个目录中。
  • 好吧,现在我看到了模式 - 非常感谢 :)
【解决方案2】:

. 代表当前目录,在您的情况下是多余的。

路径是简单的相对路径,用于确定如何导航到所需文件。

这应该适合你:

var Program = require('../../models/program');
var FinishProgram = require('../../models/finishProgram');

请注意,扩展名.js 不是必需的。

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多