使用 Express.js 和 Mongoose 构建数据库模型

在前端开发中,数据持久化是非常重要的一环。而使用 Node.js 来开发后台接口,使用 Express.js 作为 Web 框架,使用 Mongoose 来操作 MongoDB 数据库,则是很流行的一种技术栈。本文就来详细介绍如何使用 Express.js 和 Mongoose 构建数据库模型。

准备工作

在开始之前,我们需要先确保以下几个条件:

  1. 安装 Node.js 和 MongoDB。这里不再赘述。
  2. 创建一个项目目录,并在其中初始化一个 Node.js 项目。可以通过执行 npm init 来完成。
  3. 安装必要的依赖。执行以下命令:

需要安装的依赖包括 Express.js、body-parser 和 Mongoose。其中,body-parser 是一个解析请求体中 JSON 数据的中间件,用来处理 POST 请求。

创建 Express 应用

在项目目录中创建一个 app.js 文件,内容如下:

该代码首先引入了 Express.js、body-parser 和 Mongoose,然后创建了一个 Express 应用实例,并通过 app.use() 方法来使用 body-parser 中间件。接着,通过 Mongoose 来连接了本地的 MongoDB 数据库,并监听端口 3000,在控制台输出启动信息。

创建数据库模型

在 Mongoose 中,数据模型是一个 JavaScript 对象,它定义了数据的结构和操作方法。下面我们来创建一个简单的例子。

假设我们要创建一个博客系统,有两个数据模型:PostAuthor

Post

对于 Post 数据模型,我们可以定义以下属性:

在上面的代码中,我们首先定义了 Post 的数据模型,包括了 titlecontentcreatedAtauthor 四个属性。其中:

  • titlecontent 分别表示文章的标题和内容,类型为字符串,且为必填项(required: true)。
  • createdAt 表示文章的创建时间,类型为日期,在创建文档时会自动设置为当前时间。
  • author 表示该文章的作者,类型为 MongoDB 的 _id,并通过 ref 关联到了 Author 数据模型。

最后,我们通过 mongoose.model() 方法来创建一个 Post 数据模型,并且将 postSchema 作为参数传入。

Author

对于 Author 数据模型,我们可以定义以下属性:

在上面的代码中,我们首先定义了 Author 的数据模型,包括了 nameemailpasswordposts 四个属性。其中:

  • nameemailpassword 分别表示作者的姓名、邮箱和密码,类型为字符串,且为必填项(required: true)。
  • email 还设置了 unique: true,表示该属性的值必须唯一。
  • posts 表示该作者发表的所有文章,类型为一个包含了 Post 数据模型的 _id 的数组,并通过 ref 关联到了 Post 数据模型。

最后,我们通过 mongoose.model() 方法来创建一个 Author 数据模型,并且将 authorSchema 作为参数传入。

使用数据库模型

通过在应用中引入 PostAuthor 数据模型,我们就可以在控制器中使用它们了。下面我们来举一个简单的例子。

创建文章

假设我们有一个创建文章的接口,在请求体中包含了文章的 titlecontent 和作者的 email,则响应的控制器代码如下:

在上面的代码中,首先通过 require() 方法来引入了 PostAuthor 数据模型。然后,在控制器中解构出了请求体中的 titlecontent 和作者的 email,然后通过 Mongoose 的 findOne() 方法来查找对应的 Author

如果找不到对应的 Author,则返回 404 响应码和相应的错误提示;否则,创建一个 Post 实例,将 titlecontent 和相关的 author 值传入,并通过 save() 方法来保存到数据库,并将返回的结果保存在 savedPost 变量中。

最后,在将新文章的 _id 添加到 author.posts 数组中,并再次保存 Author 对象。最后返回 201 响应码和相应的文章信息。

总结

通过使用 Express.js 和 Mongoose,我们可以方便地创建并使用数据库模型。只需要定义好相应的数据结构和操作方法,就可以轻松创建和操作数据。同时,本文还举了一个创建文章的例子,使读者对于使用数据库模型的具体场景有了更深入的了解。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654862907d4982a6eb2a893c


纠错
反馈