开发博客系统:React + Express + Mongodb

简介: 本文介绍了在ECS上开发博客系统的自我体验。博客地址为:http://www.trigold.tech/博客系统采用的技术栈为:Express 后端,前端为 React。博客现在还在不断开发中,但是基本的功能:阅读文章,主题,跟随目录已经可以使用了。读者可以自行体验。在理论性学完 html, css 和 javascript 以及计算机网络之后,想找个项目练习,随后选择了博客系统。为了项目的实践性更强,就需要购买一台服务器,在本地开发虽然也可以,但是上线部署始终是一个完整项目不可缺少的。

博客地址

http://www.trigold.tech/(2022 01 09 已升级为 restful 架构,前端:react v17, styled components, redux等,后端:express,multer等,数据库:mongodb,)

背景

关于我

西安邮电大学,大3的男学生。一名前端学习者。

项目练习

在理论性学完 html,css,javascript 之后,实际上和真实的开发之间还有一些差距。而这些差距的消除正需要我们不断的实践和复盘。

博客系统 是一个经典的开发主题。但是想要开发出一个精致和完善的博客系统对于水平一般的前端开发者来说还是比较有挑战性。

在技术栈的选型上,我选择了典型的 Restful 架构。前端的依赖项有 React(v17), Axios, Styled Components, React Router DOM(v6),后端的依赖项有 Express,Multer, Mongosse 等。数据库选择了 Mongodb。

开发过程

服务器环境部署

在购买阿里云服务器之后,首先要做的事情就是部署服务器的环境。阿里云有官方的帮助文档,不过这里还是说明一下。

使用 ECS 服务器控制台中的 SSH 连接工具连接服务器之后,我们按照阿里云的官方文档键入:

wget https://nodejs.org/dist/v17.3.0/node-v17.3.0-linux-x64.tar.xz

这里采用的是最新的 nodejs 版本:17.3,nodejs 版本更新很快。

最后,键入 node 或 npm 来测试一下是否成功。

至此我们的服务器已经可以全局运行 javascript 程序。

Express 和 Pug

web 服务器的源代码在本地编写,编写完成后使用 xftp 应用上传到服务器,之后在服务器键入 node path/example.js 即可执行。

这里推荐在本地下载 xshell 和 xftp 的免费版本,以方便我们和服务器交互:https://www.xshell.com/zh/xshell/

本地编写 web 服务器的源代码,所使用的框架为 express,这里展示一下整个项目的结构。

其中,views 是用来放置实际的用户能看到的东西:视图模板。routes 则是处理用户不同的导航操作,对于不同的 url 做出反应。public 是用来存放公共资源的地方,这里我们放置了 css,js,以及关键的 markdown 文件,这些 markdown 文件就是我们本地写好的文章或者笔记。

路由,marked 和 highlightjs

在路由处理上,一开始打算处理 3 种路由:/ 首页,/note/xxx 笔记目录页,reading/xxx 文章或笔记阅读页。后面会增加 articles 文章目录页,/about 关于页等等。

这里的关键问题是怎么将 markdown 转换为 html 代码,这就要用到一个必不可少的库:marked。

将 marked 转为 html 代码之后,其中的程序部分,也就是 code 元素的内容如果不语法高亮显示,阅读体验会非常差。这里也要用到一个不可少的库:hightlightjs。

主题和跟随目录

在我们设计完主要的页面之后,对于博客系统来说,我觉得主题和跟随目录这两个功能非常重要。但同时也比较复杂。

对于主题功能来说,基本的亮色和暗色主题是必须要实现的。这里采用的是 body dark class 方案,这也是最基本的一种方案。

跟随目录也是比较关键的一个功能,试想一个页面的内容部分非常的长,用户该怎么在不同的章节导航呢?要做出目录跟随功能,我们首先做的事情就是生成一个目录,然后在用户每次滚动时获取到“current”目录,之后将生成目录中的当前目录凸显出来即可。

上线和 forever

上线

在我们开发好项目的源码之后,或是项目的源码达到“可以测试”的程度就可以上线了。这里我们要用到下载好的 xshell 和 xftp 应用。

forever

一切看起来都不错,直到你关掉连接阿里云服务器的窗口。当我们关掉连接窗口,那么运行的程序就会退出,也就是说 web 服务器被停止了。这当然是不合理的,web 服务器进程应该长期运行来监听用户们的浏览器请求。那么该怎么办呢?这就要用到进程管理器:forever 库。

总结和展望

总结

这个项目从构思到原型,从原型到能跑起来的原型,再从能跑起来的原型到看起来不错的原型,这些阶段都花费了很多的精力和时间。有时候由于一个疏忽,打错了字符,导致怎么也查不出来错误。有时候,在关闭十几个tab页之后,才找到一个报错的解决方案。有时候,你只能自己想办法解决。

坚持和对前端技术的热爱是关键的。其次还要适当地放松。

经过这个博客项目的初始构建,我发觉了一些以前用的少的知识点,比如:css !important 解决样式冲突,target.closest() 解决事件委托的bug 等等。当然主要还是巩固了自己的 html ,css 和 javascript 以及计网的知识。

但是本次的体验和以前的都是不同的,因为本次项目是一个真正线上部署的项目,这种体验促使从服务器和客户端联系上思考问题,而不是以前只关注客户端。还有,也带给了我架构上的宏观思维。

展望

这个基本的博客系统确实有些简陋,接下来的主要任务还是完善博客的功能:文章,评论,点赞。

回想在以前,前端开发者往往只能是前端开发者,但是 nodejs 的出现打破了这个规则。优秀的前端开发者同时也可以是优秀的后端开发者。nodejs 在正在带给前端开发者更大的可能。

阿里云是一个优秀的云服务提供者,物美价廉这个词确实非常适合,阿里云平台对用户和开发者的考虑很多,很多地方也体现出阿里云背后整个团队的努力以及他们的优秀的特质。希望阿里云将来有更多好的发展!

相关文章
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
500 4
React开发需要了解的10个库
|
8月前
|
运维 前端开发 数据可视化
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
本文分享了一个基于React 19构建的用户注册表单系统,采用模块化CSS和状态驱动视图更新,实现实时校验、错误提示与提交反馈等功能。核心亮点包括验证规则引擎(如密码复杂度校验)、交互反馈体系(输入框警示、按钮禁用)及加载动画优化。通过函数式更新确保状态同步,正则表达式实现多条件验证,CSS伪元素打造流畅体验。代码结构清晰,可扩展性强,适合作为React表单开发模板。文末附CodeBuddy免费下载链接,助力高效开发!
226 1
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
|
前端开发 JavaScript 开发者
React 组件化开发最佳实践
【10月更文挑战第4天】React 组件化开发最佳实践
435 4
|
Web App开发 JavaScript API
构建高效后端系统:Node.js与Express框架的实践之路
【9月更文挑战第37天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重要职责。本文将深入探讨如何利用Node.js及其强大的Express框架来搭建一个高效、可扩展的后端系统。我们将从基础概念讲起,逐步引导读者理解并实践如何设计、开发和维护一个高性能的后端服务。通过实际代码示例和清晰的步骤说明,本文旨在为初学者和有经验的开发者提供一个全面的指南,帮助他们在后端开发的旅途上走得更远。
188 3
|
XML 移动开发 前端开发
使用duxapp开发 React Native App 事半功倍
对于Taro的壳子,或者原生React Native,都会存在 `android` `ios`这两个文件夹,而在duxapp中,这些文件夹的内容是自动生成的,那么对于需要在这些文件夹中修改的配置内容,例如包名、版本号、新架构开关等,都通过配置文件的方式配置了,而不需要需修改具体的文件
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
286 0
|
开发者 自然语言处理 存储
语言不再是壁垒:掌握 JSF 国际化技巧,轻松构建多语言支持的 Web 应用
【8月更文挑战第31天】JavaServer Faces (JSF) 框架提供了强大的国际化 (I18N) 和本地化 (L10N) 支持,使开发者能轻松添加多语言功能。本文通过具体案例展示如何在 JSF 应用中实现多语言支持,包括创建项目、配置语言资源文件 (`messages_xx.properties`)、设置 `web.xml`、编写 Managed Bean (`LanguageBean`) 处理语言选择,以及使用 Facelets 页面 (`index.xhtml`) 显示多语言消息。通过这些步骤,你将学会如何配置 JSF 环境、编写语言资源文件,并实现动态语言切换。
227 1
|
开发者 Java
JSF EL 表达式:乘技术潮流之风,筑简洁开发之梦,触动开发者心弦的强大语言
【8月更文挑战第31天】JavaServer Faces (JSF) 的表达式语言 (EL) 是一种强大的工具,允许开发者在 JSF 页面和后台 bean 间进行简洁高效的数据绑定。本文介绍了 JSF EL 的基本概念及使用技巧,包括访问 bean 属性和方法、数据绑定、内置对象使用、条件判断和循环等,并分享了最佳实践建议,帮助提升开发效率和代码质量。
169 0
|
大数据 数据处理 分布式计算
JSF 逆袭大数据江湖!看前端框架如何挑战数据处理极限?揭秘这场技术与勇气的较量!
【8月更文挑战第31天】在信息爆炸时代,大数据已成为企业和政府决策的关键。JavaServer Faces(JSF)作为标准的 Java Web 框架,如何与大数据技术结合,高效处理大规模数据集?本文探讨大数据的挑战与机遇,介绍 JSF 与 Hadoop、Apache Spark 等技术的融合,展示其实现高效数据存储和处理的潜力,并提供示例代码,助您构建强大的大数据系统。
165 0

推荐镜像

更多