前言
在现代互联网时代中,博客已经成为了一个非常流行的网络记录形式,越来越多的人都开始使用博客来记录自己的生活、学习和工作经验,而随着 Node.js 和 MongoDB 的流行,我们可以使用它们来构建一个简单而强大的博客系统。
在本文中,我们将介绍如何使用 Node.js 中的 Express 和 MongoDB 构建一个博客系统,并附上代码示例。
准备工作
在开始构建博客系统之前,我们需要先准备好开发环境,可以按照以下步骤进行:
新建一个项目文件夹,在命令行中进入该文件夹并运行
npm init
命令,按照提示创建package.json
安装
Express
和MongoDB
的 Node.js 模块,在命令行中运行以下命令:npm install express mongodb --save
实现功能
在构建博客系统的过程中,我们需要实现以下功能:
- 通过浏览器访问博客主页,可以查看所有的博客文章列表
- 点击文章标题可以进入单篇文章阅读页面
- 单篇文章阅读页面可以显示文章标题和内容
- 博客管理页面可以添加新的文章、编辑已有文章和删除文章
创建服务器
在开始实现以上功能之前,我们需要先创建一个服务器来服务于这个博客系统,服务器使用 Node.js 中的 Express
模块来创建,并监听 3000
端口:
const express = require('express') const app = express() app.listen(3000, () => { console.log('Server is listening at port 3000') })
定义文章数据结构
在创建服务器之后,我们需要定义博客文章的数据结构,用于存储到 MongoDB 数据库中。数据结构包含文章标题、文章内容和创建时间等信息:
const articleSchema = new mongoose.Schema({ title: { type: String, required: true }, content: { type: String, required: true }, createdAt: { type: Date, default: Date.now } })
连接 MongoDB 数据库
在定义了文章数据结构之后,我们需要使用 mongoose
模块连接到 MongoDB 数据库,并创建一个 Article
模型来操作文章数据:
const mongoose = require('mongoose') mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true }) const Article = mongoose.model('Article', articleSchema)
实现博客主页
在服务器部分已经实现了监听端口,我们接下来要实现博客主页,即显示所有的博客文章列表:
-- -------------------- ---- ------- ------------ ----- ---- -- - ------------------ --------- -- - -- ----- - ------------------ - ---- - ------------------- - -------- -- - -- --
我们定义了一个路由处理程序,用于在根路径下响应 HTTP GET 请求。在处理程序中,我们使用 Article.find()
函数查询所有的文章数据,并将查询到的数据渲染到 index
模板中,代码如下:
<h1>博客</h1> <ul> <% for (let i = 0; i < articles.length; i++) { %> <li><a href="/articles/<%= articles[i]._id %>"><%= articles[i].title %></a></li> <% } %> </ul>
在以上代码中,我们使用了 EJS
模板引擎来渲染 HTML 页面,其中使用了循环语句来渲染所有的博客文章列表。
实现文章阅读页面
在博客主页中实现了文章列表,接下来我们需要实现点击文章标题进入文章阅读页面的功能:
-- -------------------- ---- ------- ------------------------ ----- ---- -- - ----- -- - ------------- -------------------- ----- -------- -- - -- ----- - ------------------ - ---- - --------------------- - ------- -- - -- --
在以上代码中,我们使用了动态路由来处理文章的 id
,并使用 Article.findById()
函数查询文章数据,并将查询到的数据渲染到 article
模板中,代码如下:
<h2><%= article.title %></h2> <p><%= article.content %></p>
实现博客管理页面
在博客管理页面中,我们需要实现添加、编辑、删除文章的功能,以下分别介绍:
添加文章
在博客管理页面中添加按钮,点击后跳转到添加文章页面,添加页面中包含文章标题和文章内容输入框,如下所示:
-- -------------------- ---- ------- ----- ------------- ------------------- ------ ------------------------- ------ ----------- ---------- ------------- ---- ------ --------------------------- --------- ------------ -------------------------- ---- ------- ------------------------- -------
在提交表单后,我们需要在服务器端实现保存文章到 MongoDB 数据库的功能:
-- -------------------- ---- ------- --------------------- ----- ---- -- - ----- ------- - --- ----------------- ---------------- -- - -- ----- - ------------------ - ---- - ---------------------------------------- - -- --
以上代码中,我们创建了一个新的 Article
对象,填充了表单中的数据,并使用 article.save()
函数将文章数据保存到 MongoDB 数据库中。在保存完成后,我们使用 res.redirect()
函数将页面重定向到新创建的文章阅读页面,其中 article._id
为新创建的文章 id。
编辑文章
在博客管理页面中,我们可以对已有的文章进行编辑。我们在博客阅读页面下,添加一个编辑按钮,点击后跳转到编辑页面:
<a href="/articles/<%= article._id %>/edit">编辑</a>
在编辑页面中,我们需要显示已有的文章内容,同时允许编辑文章标题和文章内容,并提供保存按钮:
-- -------------------- ---- ------- ----- ------------- --------------------- ----------- --------------------- ------ ------------------------- ------ ----------- ---------- ------------ ---------- ------------- ---- ---- ------ --------------------------- --------- ------------ ------------------ --------------- ------------- ---- ------- ------------------------- -------
在提交数据之后,我们需要在服务器端实现更新数据库中的文章数据的功能:
-- -------------------- ---- ------- ------------------------------ ----- ---- -- - ----- -- - ------------- ----- ------ - - ------ --------------- -------- ---------------- - ----------------------------- ------- --- -- - -- ----- - ------------------ - ---- - ------------------------------- - -- --
在以上代码中,我们使用 Article.findByIdAndUpdate()
函数查询并更新了数据库中的文章数据,并在更新完成后将页面重定向到文章阅读页面。
删除文章
在博客管理页面中,我们可以对已有的文章进行删除。我们在博客阅读页面下,添加一个删除按钮:
<form method="post" action="/articles/<%= article._id %>?_method=delete"> <button type="submit">删除</button> </form>
在提交数据之后,我们需要在服务器端实现删除数据库中的文章数据的功能:
-- -------------------- ---- ------- ------------------------- ----- ---- -- - ----- -- - ------------- ----------------------------- --- -- - -- ----- - ------------------ - ---- - ----------------- - -- --
在以上代码中,我们使用 Article.findByIdAndDelete()
函数查询并删除了数据库中的文章数据,并在删除完成后将页面重定向到博客首页。
总结
在本文中,我们介绍了如何使用 Node.js 的 Express 和 MongoDB 模块构建一个简单而强大的博客系统,包含了博客主页、文章阅读页面和博客管理页面等功能,并提供了相应的代码示例。希望本文对初学者有所帮助,并希望读者在实现过程中能够发挥自己的创意,构建自己心目中的博客系统!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64afca8848841e9894bf3212