【附完整项目代码】从一个社交分享平台入门MERN全栈开发

在线代码编辑器:MERN堆栈实践教程 本文还有配套的精品资源,点击获取 简介:CodeEditor_MERN是一个利用MERN堆栈构建的在线代码编辑器项目,旨在提供一个平台供用户编写、运行和存储代码。本项目全面展示了React构建前端用户界面、Node.js处理后端逻辑、Express搭建Web服务器,以及MongoDB管理数据库的关键技术。它还涉及项目文件结构、环境配置和部署流程,对于全栈开发者来说是一个宝贵... 阅读详情

1. 简介

“MERN”是MongoDB、Express、React,和NodeJS四个技术栈的合并简称,目前是北美最常用的全栈解决方案之一。作为计算机专业的学生和从业人员,在MERN / MEAN (JavaScript),Django / Flask / FastApi (Python),和SpringBoot (Java) 这几种最流行的网页开发框架应该至少掌握其中的一种。由于MERN的流行性、易学性和开发效率等优点,是其中最首推的一个技术栈。

这篇文章分享的就是一个基于 MERN 实现的航拍博客分享平台,用简洁的代码实现高性能后端功能和现代化的用户界面:


先附上完整的项目代码:Cloud Journal: A MERN-Based Aerial Photography Blogging Platform。如果喜欢或者觉得有用,请帮我的GitHub仓库点一个⭐️

2. 主要功能

 - 基于MERN 的高性能航拍博客分享平台

 - 创建、编辑自己的博客;搜索、评论和点赞所有的博客(每个用户点赞一个博客一次)

 - 谷歌账户授权登录​​​​​​​和常规的用户注册和登录认证

 - 加入Aho-Corasick算法实现敏感词过滤

 - 采用对IP限流组件对系统进行保护,避免突增流量和攻击的隐患

 - 通过分页和数据库索引优化查询耗时

 - 引入CI/CD和测试工具

3. Demo

Cloud Journal Demo

4. 总体架构

 MERN的技术架构如下:

  • MongoDB:一个非关系型数据库 (NoSQL)的跨平台数据库,使用类似JSON的格式存储数据
  • Express.js:一个Node.js的网页应用框架
  • React:一个用于构建用户界面的JavaScript library
  • Node.js:一个开源、跨平台的JavaScript运行环境

5. 模块介绍

这个图是画来让大家理解数据和不同的操作是如何在各个模块之间进行流转的,其中包含了这个项目所用到的所有技术。下面作者会对一些关键的组件进行更细致的解释。有任何部分不清楚或者不正确欢迎大家评论指正。

5.1 server后端部分

1. 后端部分的入口是index.js文件,它使用mongoose库创建了与MongoDB数据库的连接,并创建了express的实例。

2. Model模块定义了数据库中将包含哪几种类型的数据(例如帖子、用户),还有每种数据分别包含了哪些属性(例如名字、邮箱)

3. Controller模块处理来自Route的请求,实现业务的逻辑(例如和数据模型交互)并返回响应。

4. Route模块定义所有的URL,决定由控制器的哪个函数处理特定的请求(例如GET, POST, PUT,  DELETE)

5. Middleware模块主要负责用户身份的验证,即验证前端正在执行操作用户与其登录时候签发的令牌(json-web-token)是否相同,如果验证通过则进一步执行后续的操作。

5.2 client前端部分

1. 与后端部分相同,前端的入口同样也是index.js文件,它接收由App.js传递来的界面结构并渲染出来。并创建Redux实体并用Redux来存储前端中各种变量的状态来用于展示或者交互。

2. App.js接收来自Component中所有组件的结构、内容、和样式信息,创建出虚拟DOM,准备交给浏览器渲染。DOM(Document Object Model)是网页文档的结构化树状表示。

3. Component模块使用React配合Material UI构建出美观的用户界面(包括导航栏、帖子、登录框等等),并通过呼叫Action和API获取到所需的后端数据填入其中。

4. Action模块定义应用中的状态应当如何改变,然后更新Redux。

5. API模块负责与后端服务器进行异步通讯,请求或发送数据到Restful API。

6. Reducer模块是一个函数,它通过Redux监听Action的行为并返回新的状态。

5.3 其他部分

1. Babel :一个JavaScript 编译器工具,将使用更新标准编写的 JavaScript 代码转换成向后兼容的版本。

2. Google OAuth API: 负责授权谷歌账户直接登录改平台,获得与一般登录用户同等的权限。

3. 限流:限制来自同一个IP地址或用户的请求次数在给定时间窗口内的数量,帮助保护应用免受恶意攻击,例如拒绝服务攻击(DoS)或密集型爬虫活动。

4. 测试工具:使用Jest和mockingoose等工具引入自动化测试,包括单元测试和集成测试。

6. 运行方法

6.1 要求和环境

  - Node.js v20.8 (不一定要相同)

  - 配置MongoDB Atlas (Altas是MongoDB的云端版本,可视实际速度选择本地MongoDB或Atlas)

  - Google API Client ID:在其👉开发者官网获取

     -  这个API是免费的,用于谷歌账户的授权登录,如果不需要这个功能可以跳过。

6.2 安装

 1. 分别在client和server文件夹里面各创建一个 .env 文件,填写端口号、连接MongoDB的URL,和谷歌API的Client ID。格式可参照文件夹里 .env.example 的格式。

2. 打开2个terminal终端的界面分别操作client端和server端。

3. 安装server端所需的包,并依次运行:

cd server
npm i
npm start

4. 安装client端所需的包,并依次运行:

cd client
npm i --legacy-peer-deps
npm start

5. 然后默认浏览器应当会自动打开项目的主页。

7. 完整代码

完整的代码可以查看:Cloud Journal: A MERN-Based Aerial Photography Blogging Platform

如果你喜欢这篇文章,请给我的仓库点一个⭐️ 这是我更新教程的最大动力,再次感谢!

-END-

电磁仿真新手必看:如何用CST Studio Suite 2023完成第一个PCB辐射仿真? 本文详细解析了如何使用CST Studio Suite 2023进行PCB辐射仿真,适合电磁仿真新手快速上手。从工程准备、求解器配置到端口设置和后处理技巧,全面覆盖三维全波电磁场仿真软件的核心操作步骤,帮助工程师精准预测和解决PCB电磁辐射问题。 阅读详情

相关推荐

一文讲透什么是ADC/DAC中的DDC、DUC、采样率以及数据率等概念

摘要:ADC/DAC中的采样率与数据率概念不同,采样率是转换器的时钟速率,而数据率是数字输出的实际速率。抽取通过滤波降低数据速率,提升信噪比但牺牲带宽;内插则通过插零和滤波提高采样率,将镜像信号移远但增加延迟和功耗。JESD204B标准的高速转换器需平衡通道数与串行速率,内插/抽取技术是关键。文章还解析了DDC、DUC的应用及优缺点,为高速数据转换设计提供参考。(150字)

weixin_49761275的博客 4264

MERN 技术栈高级教程(一)

Web 应用开发已经今非昔比,甚至几年前也是如此。今天,有这么多的选择,门外汉往往不知道什么对他们有好处。有很多选择;不仅仅是广泛的栈(所使用的各种层或技术),还包括用于帮助开发的工具。这本书声称 MERN 堆栈对于开发一个完整的 web 应用是非常棒的,并带领读者完成所有必要的工作。在这一章中,我将对 MERN 堆栈所包含的技术进行概述。在这一章中,我不会详细介绍细节或例子,相反,我将只介绍高层次的概念。我将关注这些概念如何影响对 MERN 是否是您下一个 web 应用项目的好选择的评估。

龙哥盟 1460

MERN 堆栈教程

MERN 堆栈一词包含以下技术,可加快应用程序开发速度:MongoDB :一个跨平台的面向文档的数据库程序Express.js :Node.js 的 Web 应用程序框架React :用于构建用户界面的 JavaScript 库Node.js :一个开源、跨平台的 JavaScript 运行时环境,可在浏览器之外执行 JavaScript 代码MongoDB、Express.js 和 Node.js 可帮助您构建应用程序的后端,而 React 则为前端提供支持。

分享身边生活经验blog 788

EXCEL VBA 导出高清图片方法

EXCEL VBA 导出高清图片方法 将EXCEL表格内容另存为图片的方法有很多种,简单的比如“复制为图片格式并另存”,“打印成XPS”等等,本文着重的是利用VBA实现的方法。 该方法适合用于中大型图文表格输出为图片格式,方便传阅,在office2010及以上版本最为流畅。 具体看代码: Sub printA4() Dim rng As Range '定义截图范围变量 'm = 20...

nfser_burn7的专栏 1万+

在 SAP 中实现“租赁资产”管理,核心是把 IFRS16/ASC842 等新租赁准则的要求落地到系统

摘要:本文详细介绍了在SAP S/4HANA系统中实现IFRS16/ASC842租赁准则的具体操作流程。主要内容包括:1) 系统前置配置,如激活租赁会计组件、定义租赁类型和会计科目;2) 租赁合同创建与主数据维护;3) 初始确认的会计处理;4) 日常折旧计提和租金支付流程;5) 合同变更与终止管理。通过RE-FX-LM模块与固定资产模块的集成,系统可自动生成使用权资产和租赁负债,支持从合同创建到报表披露的全生命周期管理,确保符合新租赁准则要求。

金牌架构师 984

前端代码合集

HTML5使用FileReader实现前端图片预览var fileInput = document.querySelector(‘input[type=file]’);var previewImg = document.querySelector(‘img’);fileInput.addEventListener(‘change’, function () { var file = this.f

qq_597221342的博客 561

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

MERN 项目初学者指南(一)

在这一章中,我们学习了创建 MERN(MongoDB,Express,ReactJS,NodeJS)项目的所有不同技术。我们还学习了如何在不同的环境中部署它们,我们将在接下来的章节中使用它们。在这一章中,我们在 MERN 堆栈中创建了一个约会应用。我们在 ReactJS 中构建前端,并在 Firebase 中托管它。后端构建在 NodeJS 中,托管在 Heroku 中。数据库是在 MongoDB 中构建的。在本章中,我们创建了一个短视频分享应用。

龙哥盟 1504

【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码

RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

FPGA/MATLAB学习教程/源码/项目合作开发 3540

AutoSAR系列讲解(实践篇)12.1-Diagnostics简介

主要概括性的讲解了诊断协议UDS和AutoSAR的诊断架构

雪云飞星的博客 1万+

React 全栈项目(一)

本书探讨了通过将 React 的力量与经过行业测试的服务器端技术(如 Node、Express 和 MongoDB)相结合,开发全栈 JavaScript Web 应用的潜力。JavaScript 领域已经快速增长了一段时间。在这个主题上有大量的选择和资源可用,当你需要从这些经常变化的部分中进行选择、了解它们并使它们一起工作来构建自己的 Web 应用时,很容易迷失。为了解决这一痛点,本书采用了一种实用的方法,帮助您设置和构建使用这种流行的 JavaScript 堆栈的各种工作应用程序。

龙哥盟 1542

中国国家级地面气象站基本气象要素日值数据集(V3.0)

气温数据TEM, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气温(tmean), 最高气温(tmax), 最低气温(tmin)气压数据PRS, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气压(pmean), 最高气压(pmax), 最低气压(pmin)中国国家级地面气象站基本气象要素日值数据集(V3.0)

J_Giser的博客 3892

MERN AI 图像生成应用 - 全栈开发实践

本项目是一个基于MERN技术栈的全栈web应用,旨在模仿MidJourney和DALL-E等AI图像生成工具的核心功能。用户可以通过输入文本描述来生成AI创作的图像,并可以将生成的图像分享到社区展示区。项目整合了现代web开发技术和最新的AI能力,是一个极具学习价值的实践案例。通过这个项目,我们不仅实践了全栈web开发的各个环节,还探索了如何将先进的AI能力集成到web应用中。这种结合代表了技术发展的一个重要方向,为开发者开启了无限的创新可能。

m0_56734068的博客 1074

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

React 全栈项目第二版(一)

本书通过结合 React 的强大功能和经过行业验证的服务端技术(如 Node.js、Express 和 MongoDB)来探讨全栈 JavaScript Web 应用的开发。JavaScript 领域已经迅速发展了一段时间。在有关全栈 JavaScript Web 应用方面,有大量的选项和资源可用,当你需要从这些经常变化的实体中选择、了解它们并使它们协同工作以构建自己的 Web 应用时,很容易感到迷茫。为了解决这个痛点,本书采用了一种实用方法,帮助你使用流行的 MERN 框架搭建和构建各种工作应用。

龙哥盟 847

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从0到1开发Instaclone:MERN stack全栈开发实战详解

Instaclone是一个使用MongoDB、Express、React和Socket.io构建的Instagram克隆项目,通过MERN stack技术栈实现了社交媒体平台的核心功能。本文将为你提供从环境搭建到功能实现的完整指南,帮助你快速掌握全栈开发技能。 ## 为什么选择MERN stack开发社交应用? MERN stack(MongoDB+Express+React+Node.js)

gitblog_00930的博客 466

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MERN Social社交功能深度解析:帖子、评论与点赞系统的完整开发指南

想要构建一个功能完善的社交应用吗?MERN Social作为基于MERN技术栈的社交应用,提供了一个完整的社交功能实现方案。本文将深入解析这个开源项目的帖子、评论与点赞系统开发指南,帮助你快速掌握社交应用的核心功能实现。 ## 📱 MERN Social社交应用概述 MERN Social是一个使用MongoDB、Express、React和Node.js构建的完整社交应用。它包含了现代社交

gitblog_00002的博客 444

探索全功能的MERN堆栈社交平台:全面解析与应用推荐

探索全功能的MERN堆栈社交平台:全面解析与应用推荐 mern-social-media[Full stack react project/ MERN stack project] A MERN stack based project on social media application with admin panel. It is completely working project. ...

gitblog_00086的博客 510

MERN Ecommerce 扩展开发:如何添加自定义功能模块的完整指南

想要为你的MERN电子商务应用添加自定义功能模块吗?🎯 这篇终极指南将带你一步步了解如何在MERN全栈电子商务应用中扩展功能,让你的电商平台更加强大和个性化!MERN(MongoDB + Express + React + Node.js)是目前最流行的全栈开发技术栈之一,而MERN Ecommerce项目为你提供了一个完整的电商基础框架。 ## 📦 为什么需要扩展MERN电子商务功能?

gitblog_01177的博客 791

基于MERN栈的私人食谱管理系统:从需求到部署的全栈实践

在Web应用开发领域,全栈技术栈如MERN(MongoDB, Express, React, Node.js)因其高效和灵活而备受青睐。其核心原理在于利用JavaScript统一前后端语言,通过React构建交互式用户界面,Node.js处理服务器端逻辑,Express框架简化API开发,而MongoDB的文档型数据库特性则能灵活存储非结构化数据。这种架构的技术价值在于开发效率高、上下文切换成本低,非常适合快速构建和迭代数据驱动的应用。其典型应用场景包括内容管理系统、社交平台以及各类需要复杂数据交互的Web

weixin_30312563的博客 324

推荐开源项目:MERN Mediastream 2.0 - 媒体流应用的新里程碑

推荐开源项目:MERN Mediastream 2.0 - 媒体流应用的新里程碑 1、项目介绍 MERN Mediastream 2.0 是一款基于现代Web技术构建的媒体流应用,它允许用户上传和播放多媒体文件。这个开源项目由React前端、Node.js后端、Express框架以及MongoDB数据库构成,旨在提供一个易于扩展和自定义的基础平台,让开发者可以快速构建自己的媒体分享平台。 您可以...

gitblog_00040的博客 452

探索未来:构建与部署全栈MERN AI图像生成应用 - MidJourney & DALL·E克隆版

探索未来:构建与部署全栈MERN AI图像生成应用 - MidJourney & DALL·E克隆版 ???? 项目介绍 MidJourney & DALL·E Clone 是一款开源的全栈Web应用程序,它利用先进的人工智能技术,让用户能够创建和部署独特的图像生成作品。灵感来源于Midjourney和DALL·E,这个项目提供了类似的功能,让你能够在浏览器中体验AI的强大创造力。 ????...

gitblog_00033的博客 478

10个必做编程项目:Project-Ideas-And-Resources终极指南助你快速提升技能

想要提升编程技能却不知从何开始?Project-Ideas-And-Resources正是为开发者们量身打造的终极项目指南!这个开源项目汇集了从入门到高级的完整编程项目清单,帮你快速突破技能瓶颈,打造令人印象深刻的个人作品集。🚀 ## 为什么选择这个项目库?✨ Project-Ideas-And-Resources不仅仅是一个简单的项目列表,它为每个项目提供了详细的功能描述、用户故事和扩展建

gitblog_01179的博客 1038

instagram-mern数据库设计:MongoDB Schema优化与性能提升技巧

在当今社交媒体平台蓬勃发展的时代,构建高效、可扩展的数据模型是确保应用性能的关键。instagram-mern作为基于MERN Stack和Socket.io开发的全栈Instagram克隆项目,其数据库设计直接影响着用户体验和系统稳定性。本文将深入剖析instagram-mern项目的MongoDB Schema设计理念,分享实用的优化技巧,帮助开发者打造高性能的社交媒体应用。 ## Mong

gitblog_00257的博客 148

Instaclone:使用MongoDB、Express、React和Socket.io构建的终极Instagram克隆项目

Instaclone是一个基于MongoDB、Express、React和Socket.io技术栈构建的Instagram克隆项目,它完美复制了Instagram的核心功能,让开发者能够快速学习和掌握现代社交媒体应用的构建方法。这个项目不仅提供了完整的前后端实现,还包含了实时通信功能,为用户带来流畅的社交体验。 ## 🌟 项目核心功能概览 Instaclone作为一个功能完备的Instagr

gitblog_00150的博客 1077

MERN Social性能优化终极指南:提升社交应用响应速度的5个有效策略

MERN Social是一个基于MERN技术栈(MongoDB、Express、React、Node.js)构建的现代化社交媒体应用。对于社交应用来说,**性能优化**直接影响用户体验和用户留存率。本文将分享5个实用的MERN Social性能优化策略,帮助你显著提升应用的响应速度。🎯 ## 📊 1. 优化前端资源加载与代码分割 MERN Social使用Webpack进行前端资源打包,默

gitblog_00874的博客 430
上一篇: C语言数字图像处理(十):Otus算法,移动平均和区域生长算法
下一篇: (力扣记录)146. LRU 缓存
Wilson_ZheLIN
博客等级 码龄5年 684粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值