在前端开发中,数据持久化是非常重要的一环。而使用 Node.js 来开发后台接口,使用 Express.js 作为 Web 框架,使用 Mongoose 来操作 MongoDB 数据库,则是很流行的一种技术栈。本文就来详细介绍如何使用 Express.js 和 Mongoose 构建数据库模型。
准备工作
在开始之前,我们需要先确保以下几个条件:
- 安装 Node.js 和 MongoDB。这里不再赘述。
- 创建一个项目目录,并在其中初始化一个 Node.js 项目。可以通过执行
npm init
来完成。 - 安装必要的依赖。执行以下命令:
npm install express body-parser mongoose --save
需要安装的依赖包括 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 对象,它定义了数据的结构和操作方法。下面我们来创建一个简单的例子。
假设我们要创建一个博客系统,有两个数据模型:Post
和 Author
。
Post
对于 Post
数据模型,我们可以定义以下属性:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ---- -- -------- - ----- ------- --------- ---- -- ---------- - ----- ----- -------- -------- -- ------- - ----- ------------------------------- ---- -------- - --- ----- ---- - ---------------------- ------------
在上面的代码中,我们首先定义了 Post
的数据模型,包括了 title
、content
、createdAt
和 author
四个属性。其中:
title
和content
分别表示文章的标题和内容,类型为字符串,且为必填项(required: true)。createdAt
表示文章的创建时间,类型为日期,在创建文档时会自动设置为当前时间。author
表示该文章的作者,类型为 MongoDB 的_id
,并通过ref
关联到了Author
数据模型。
最后,我们通过 mongoose.model()
方法来创建一个 Post
数据模型,并且将 postSchema
作为参数传入。
Author
对于 Author
数据模型,我们可以定义以下属性:
-- -------------------- ---- ------- ----- ------------ - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- --------- - ----- ------- --------- ---- -- ------ -- ----- ------------------------------- ---- ------ -- --- ----- ------ - ------------------------ --------------
在上面的代码中,我们首先定义了 Author
的数据模型,包括了 name
、email
、password
和 posts
四个属性。其中:
name
、email
和password
分别表示作者的姓名、邮箱和密码,类型为字符串,且为必填项(required: true)。email
还设置了unique: true
,表示该属性的值必须唯一。posts
表示该作者发表的所有文章,类型为一个包含了Post
数据模型的_id
的数组,并通过ref
关联到了Post
数据模型。
最后,我们通过 mongoose.model()
方法来创建一个 Author
数据模型,并且将 authorSchema
作为参数传入。
使用数据库模型
通过在应用中引入 Post
和 Author
数据模型,我们就可以在控制器中使用它们了。下面我们来举一个简单的例子。
创建文章
假设我们有一个创建文章的接口,在请求体中包含了文章的 title
、content
和作者的 email
,则响应的控制器代码如下:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ------ - --------------------------- ----- ---------- - ----- ----- ---- -- - ----- - ------ -------- ----- - - --------- --- - ----- ------ - ----- ---------------- ----- --- -- --------- - ------ ---------------------- -------- ------- --- ------ --- - ----- ---- - --- ------ ------ -------- ------- ---------- --- ----- --------- - ----- ------------ --------------------------------- ----- -------------- -------------------------------- - ----- ----- - ------------------- ---------------------- -------- ------- ------ --- - --
在上面的代码中,首先通过 require()
方法来引入了 Post
和 Author
数据模型。然后,在控制器中解构出了请求体中的 title
、content
和作者的 email
,然后通过 Mongoose 的 findOne()
方法来查找对应的 Author
。
如果找不到对应的 Author
,则返回 404
响应码和相应的错误提示;否则,创建一个 Post
实例,将 title
、content
和相关的 author
值传入,并通过 save()
方法来保存到数据库,并将返回的结果保存在 savedPost
变量中。
最后,在将新文章的 _id
添加到 author.posts
数组中,并再次保存 Author
对象。最后返回 201
响应码和相应的文章信息。
总结
通过使用 Express.js 和 Mongoose,我们可以方便地创建并使用数据库模型。只需要定义好相应的数据结构和操作方法,就可以轻松创建和操作数据。同时,本文还举了一个创建文章的例子,使读者对于使用数据库模型的具体场景有了更深入的了解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654862907d4982a6eb2a893c