如何使用Mongoose将MongoDB连接到Node.js?

614 阅读4分钟

如何使用Mongoose将MongoDB连接到Node.js

Mongoose.js将你的MongoDB集群或集合与你的Node.js应用连接起来。它使你能够为你的文件创建模式。在创建和处理模式时,Mongoose提供了大量的功能。

在本教程中,我们将研究如何将MongoDB实例与Node.js应用程序连接起来。

如何使用Mongoose将MongoDB连接到Node.js上

MongoDB是当今开发者世界中使用最广泛的No-SQL数据库之一。No-SQL数据库允许开发者以JSON文档的形式发送和检索数据,而不是SQL对象。为了在Node.js应用程序中与MongoDB一起工作,我们可以使用Mongoose。

前提条件

在我们继续之前,你需要具备以下条件。

  • 在你的机器上安装Node.js。
  • 在你的机器上运行一个MongoDB实例。如果你想使用MongoDB Atlas,你就不需要这个。
  • 对Node.js和Express.js有一些了解。

第1步 - 在Node.js环境中安装Mongoose

通过在终端上运行以下命令,创建并导航到一个新的文件夹。

$ mkdir mongoose_tutorial
$ cd mongoose_tutorial

然后通过在终端上执行以下命令来安装Express和Mongoose。

$ npm install express mongoose --save

如果你使用的是Yarn,请运行。

$ yarn add express mongoose

第2步 - 创建连接

创建一个新文件server.js ,以启动我们的Express.js服务器。通过在server.js 中添加以下代码来加载mongooseexpress

server.js

const express = require("express");
const mongoose = require("mongoose");
const Router = require("./routes")

const app = express();

app.use(express.json());

然后使用mongoose.connect() 函数连接到本地MongoDB实例。

server.js

mongoose.connect('mongodb://localhost:27017/usersdb',
  {
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true
  }
);

我们将useNewUrlParser: true ,等等传递给mongoose.connect() ,以避免 DeprecationWarning.

要创建与MongoDB Atlas的连接,请遵循接下来的步骤。

  1. 在MongoDb Atlas中打开你的集群标签,并点击CONNECT

Connect to cluster

  1. 选择Connect your application ,并选择Node.js作为驱动程序。
  2. 复制连接字符串。

Connection string

利用手头的连接,创建以下变量并使用你的实际凭证替换它们的值。

server.js

const username = "<mongodb username>";
const password = "<password>";
const cluster = "<cluster name>";
const dbname = "myFirstDatabase";

mongoose.connect(
  `mongodb+srv://${username}:${password}@${cluster}.mongodb.net/${dbname}?retryWrites=true&w=majority`, 
  {
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true
  }
);

值得注意的是,集群变量是出现在@.mongodb.net 之间的值。在我的例子中,集群变量是cluster0.vte2d

为了确保你的连接是成功的,在你的mongoose.connect() 下面添加以下代码。

server.js

// ...
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error: "));
db.once("open", function () {
  console.log("Connected successfully");
});

然后,将应用程序设置为监听3000端口。

server.js

// ...
app.use(Router);

app.listen(3000, () => {
  console.log("Server is running at port 3000");
});

我们稍后将创建Router

第3步 - 创建模式

现在让我们为我们的应用程序定义一个集合模式。

创建另一个文件models.js ,并添加以下代码。

models.js

const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  age: {
    type: Number,
    default: 0,
  },
});

const User = mongoose.model("User", UserSchema);

module.exports = User;

我们使用mongoose.Schema() 方法创建一个模式UserSchema 。该模式收集了从请求中发送的nameage 字段。

然后我们使用最后2行导出模式。

第4步 - 创建POST端点

创建一个新的文件routes.js 。这个文件定义了我们应用程序的端点。

通过添加以下代码加载express 和我们在步骤3中创建的模式。

routes.js

const express = require("express");
const userModel = require("./models");
const app = express();

然后通过添加以下代码创建POST端点。

routes.js

// ...
app.post("/add_user", async (request, response) => {
    const user = new userModel(request.body);
  
    try {
      await user.save();
      response.send(user);
    } catch (error) {
      response.status(500).send(error);
    }
});

我们创建一个路由/add_user ,向数据库添加一个新用户。我们使用行const user = new userModel(request.body); ,解析要保存到数据库的内容。

然后我们使用try/catch 块,用.save() 方法将对象保存到数据库中。

第5步 - 创建GET端点

routes.js 文件中添加以下几行代码。

routes.js

// ...
app.get("/users", async (request, response) => {
  const users = await userModel.find({});

  try {
    response.send(users);
  } catch (error) {
    response.status(500).send(error);
  }
});

我们创建一个路由/users 来检索所有使用/add_user 路由保存的用户。我们使用.find() 方法从数据库中收集这些用户。然后,我们使用一个try/catch 块来 "发送 "用户到这个端点。

最后,通过添加下面这行来导出这些端点。

routes.js

// ...
module.exports = app;

在这一点上,你的应用程序已经准备好了。通过运行下面的命令来服务该应用程序。

$ node server.js

第6步 - 测试端点

现在,让我们测试一下我们上面创建的两个端点。

打开Postman,向http://localhost:3000/add_user 端点发出一个POST 的请求。

Add user to database

一个新的user 被添加到数据库中。你可以检查你的集合来确认这一点。

http://localhost:3000/users 端点发出一个GET 的请求。

GET all users

该端点返回所有添加到数据库中的users 的列表。

总结

在本教程中,我们已经研究了如何设置Mongoose。我们还研究了如何建立数据库连接以及如何为我们的集合创建一个模式。Mongoose可用于连接MongoDB和MongoDB Atlas到你的Node.js应用程序。