我正在开发一个由节点驱动的应用程序,它有几个(三个)不同的文件夹。它看起来像这样:
Client-
Server-
-node_modules
-mongoose
Database-
-index.js
Config-
-credentials.js
我已经使用我的所有密码创建了一个exports
对象并将其放在数据库文件夹中(这样我就可以轻松地将其从签入任何版本控件中忽略)。
我想知道是否有办法让服务器目录中node_modules
和server
目录使用database
的 ALL ,以便我的package.json
目录中的server
文件将包含"后端"所需的所有软件包。我的项目。
但是,当我执行此操作并尝试从require(mongoose)
文件Database/index.js
时,我会收到"cannot find module"
错误。我尝试了以下组合,但在每种情况下仍会出现错误:
require(mongoose)
require(../server/mongoose)
require(../server/node_modules/mongoose)
直接在mongoose
目录中安装Database
模块可以解决此问题,但这意味着我必须在每个目录中都有node_modules
(以及package.json
)文件。这是解决此问题的正确方法还是有更简单的解决方案?
由于
答案 0 :(得分:1)
也许您会发现以下文章很有趣: "Where does Node.js and require() look for modules?" ,以便了解为什么尝试不同的方式"需要" mongoose
实际上并不起作用 - 这是因为您组织代码的方式(node_modules
目录位于Server
内,Database
目录位于/
目录下1}} - 根目录)。
因此,在您的情况下,您必须指定/Database/index.js
mongoose
的相对文件路径才能找到您的模块:
require('../server/node_modules/mongoose');
另一个解决方案(我亲自组织这样的代码)将在服务器代码中移动数据库代码;毕竟,它是所有后端代码。
答案 1 :(得分:0)
我知道这不是优雅的方式,但我对你的案子有建议。
您可以尝试如下;。
var mongoose = require('../server/node_modules/mongoose/index');
我在当地模拟了你的情况,这很有效。