在前端开发中,数据持久化是非常重要的一环。而使用 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
文件,内容如下:
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const app = express(); app.use(bodyParser.json()); mongoose.connect('mongodb://localhost/test'); app.listen(3000, () => { console.log('Server is running on http://localhost:3000'); });
该代码首先引入了 Express.js、body-parser 和 Mongoose,然后创建了一个 Express 应用实例,并通过 app.use()
方法来使用 body-parser 中间件。接着,通过 Mongoose 来连接了本地的 MongoDB 数据库,并监听端口 3000,在控制台输出启动信息。
创建数据库模型
在 Mongoose 中,数据模型是一个 JavaScript 对象,它定义了数据的结构和操作方法。下面我们来创建一个简单的例子。
假设我们要创建一个博客系统,有两个数据模型:Post
和 Author
。
Post
对于 Post
数据模型,我们可以定义以下属性:
// javascriptcn.com 代码示例 const postSchema = new mongoose.Schema({ title: { type: String, required: true }, content: { type: String, required: true }, createdAt: { type: Date, default: Date.now }, author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' } }); const Post = mongoose.model('Post', postSchema);
在上面的代码中,我们首先定义了 Post
的数据模型,包括了 title
、content
、createdAt
和 author
四个属性。其中:
title
和content
分别表示文章的标题和内容,类型为字符串,且为必填项(required: true)。createdAt
表示文章的创建时间,类型为日期,在创建文档时会自动设置为当前时间。author
表示该文章的作者,类型为 MongoDB 的_id
,并通过ref
关联到了Author
数据模型。
最后,我们通过 mongoose.model()
方法来创建一个 Post
数据模型,并且将 postSchema
作为参数传入。
Author
对于 Author
数据模型,我们可以定义以下属性:
// javascriptcn.com 代码示例 const authorSchema = new mongoose.Schema({ name: { type: String, required: true }, email: { type: String, required: true, unique: true }, password: { type: String, required: true }, posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }] }); const Author = mongoose.model('Author', authorSchema);
在上面的代码中,我们首先定义了 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
,则响应的控制器代码如下:
// javascriptcn.com 代码示例 const Post = require('./models/post'); const Author = require('./models/author'); const createPost = async (req, res) => { const { title, content, email } = req.body; try { const author = await Author.findOne({ email }); if (!author) { return res.status(404).json({ message: 'Author not found' }); } const post = new Post({ title, content, author: author._id }); const savedPost = await post.save(); author.posts.push(savedPost._id); await author.save(); res.status(201).json(savedPost); } catch (err) { console.error(err); res.status(500).json({ message: 'Server error' }); } };
在上面的代码中,首先通过 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