无法在简单节点.js应用程序中找到模块 mongodb

Unable to find module mongodb in simple node.js app

本文关键字:模块 mongodb 应用程序 js 简单 节点      更新时间:2023-09-26

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


我正在关注这本书 addyosmani - 用于创建一个简单的骨干.js应用程序的骨干基础知识,以节点服务器和 mongodb 作为后端。

按照指示,我已经从 www.mongodb.org 安装了最新版本的 Node.js fromnodejs.org 和 mongodb,并按照说明运行了 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,由于某种原因它没有成功。

我进一步冒险并安装了快递,遵循以下步骤:

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,没有任何错误。


现在,一旦我创建了一个简单的server.js文件并尝试使用命令执行它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 帖子,答案说我必须使用 npm 再次安装 mongodb。

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

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

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

如果没有,为什么需要使用npm再次安装它,原始安装和npm安装有什么区别..?

原始安装将数据库本身安装在您的计算机上。npm 安装安装包节点.js需要与 mongodb 通信。NPM 就像 .NET 的 NuGet。您有一个数据库,但仍必须安装包以使框架与数据库本身通信

下面是如何使用 mongodb 模块连接到节点中的 mongo 实例的示例.js

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();
        });
    });

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

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

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