【问题标题】:Unable to find module mongodb in simple node.js app无法在简单的 node.js 应用程序中找到模块 mongodb
【发布时间】:2014-11-26 01:08:40
【问题描述】:

TL;DR:以下是我为达到错误所遵循的步骤的详细说明。要查找基本问题,请跳到最底部。


我正在关注这本书 addyosmani - backbone-fundamentals 创建一个简单的以节点服务器和 mongodb 作为后端的主干.js 应用程序。

按照指示,我从nodejs.org 安装了最新版本的 Node.js,从 www.mongodb.org 安装了 mongodb,并按照 instructions 运行了 mongodb。

现在按照教程,我创建了以下内容:

{ //package.json
  "name": "backbone-library",
  "version": "0.0.1",
  "description": "A simple library application using Backbone",
  "dependencies": {
    "express": "~3.1.0",
    "path": "~0.4.9",
    "mongoose": "~3.5.5"
  }
}

在我的项目的根目录并执行npm install,由于某种原因它没有成功。

我进一步冒险安装了expressfollowing these steps

npm init
npm install express --save
npm install express

这创建了以下 package.json,我认为它与教程中提到的基本相同:

{
  "name": "Backbone-Library",
  "version": "0.0.1",
  "description": "A simple library application using Backbone",
  "main": "index.html",
  "dependencies": {
    "express": "^3.18.3",
    "mongoose": "^3.5.16",
    "path": "^0.4.9"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

这创建了与教程中提到的完全相同的文件夹结构:

node_modules
|_ .bin
|_ express
|_ mongoose
|_ path

然后我成功地执行了npm install,没有任何错误。


现在,一旦我 create a simple server.js file 并尝试使用命令 node server.js 执行它,我会收到以下错误:

module.js:340
throw err;
      ^
Error: Cannot find module 'mongodb'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (D:\<-- path to project ->\Backbone-Library\node_modules\mongoose\lib\utils.js:5:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

如果需要,我可以提供完整的跟踪信息)。

我发现这些 StackOverflow posts 涉及相同的错误,答案说我必须使用 npm 再次安装 mongodb。

我很困惑,因为这本书没有提到任何关于这一步的内容。

我对这里提到的所有内容都很陌生,除了骨干网 - node.jsnpmmongodb 等,所以我可能会遗漏一些基本概念。

我想知道是否可以使用我之前安装的现有数据库,而不是通过npm再次下载和安装。

如果不是,为什么还要用npm重新安装,原来安装和npm安装有什么区别..?

【问题讨论】:

    标签: javascript node.js mongodb backbone.js


    【解决方案1】:

    原始安装将数据库本身安装在您的机器上。 npm install 安装 node.js 需要与 mongodb 通信的包。 NPM 类似于 .NET 的 NuGet。您有一个数据库,但仍需要安装框架包以与数据库本身通信

    这是一个关于如何使用 mongodb 模块连接到 node.js 中的 mongo 实例的示例

    var MongoClient = require('mongodb').MongoClient;
    
        MongoClient.connect('mongodb://localhost:27017/course', function(err, db) {
            if(err) throw err;
    
            var query = { 'grade' : 100 };
    
            db.collection('grades').find(query).toArray(function(err, docs) {
                if(err) throw err;
    
                console.dir(docs);
    
                db.close();
            });
        });
    

    【讨论】:

    • 那么,npm install mongodb 没有安装数据库本身..?
    • 不,它会为 node.js 安装一个包/模块,以了解如何使用 mongodb 并与之通信。想想它有一个 node.js 的驱动程序可以与 mongodb 一起工作
    【解决方案2】:

    MongoDB 是一个数据库软件;类似于 MySQL 是一个软件。通常,您与数据库层的交互是由某种抽象库管理的——在这种情况下,节点模块 mongoose

    听起来你有require('mongodb'),而你应该有require('mongoose')。这将引入Mongoose 模块,它本质上是一个用于与MongoDB 数据库交互的代码库。

    听起来您对术语有些困惑。如果您有任何问题,请随时联系我:)

    【讨论】:

    • 如果他想使用猫鼬的话。他仍然可以使用 mongodb 包
    • server.js 文件与此处显示的完全一样 addyosmani.github.io/backbone-fundamentals/… 并且它具有 require('mongoose') ...
    • 您的计算机上安装了 MongoDB 吗?
    • 你能把你的完整堆栈跟踪放在一个 pastebin 或其他东西中吗...我认为这会对我有所帮助
    • @JordanForeman 当然,我对术语或npm 的基本用法感到困惑。 mongoose 已将 mongodb 列为它们在其 package.json 中的依赖项,这是否意味着 mongoose 文件夹应该在其中包含另一个 node_modules 文件夹,其中包含 mongodb..?我的项目根文件夹中的npm install 应该安装所有列出的依赖项、它们的依赖项、它们的依赖项的依赖项等等..?
    猜你喜欢
    • 2020-07-30
    • 2012-12-22
    • 1970-01-01
    • 2012-10-12
    • 2014-01-24
    • 2014-09-16
    • 2018-08-30
    • 2021-12-01
    • 2021-03-03
    相关资源
    最近更新 更多