使用 MERN 堆栈构建登录/注册 - 第 1 部分(后端)

前 5 个 MERN STACK 项目可提高您的实践理解 MERN Stack 是一个 JavaScript 堆栈,它包含强大而稳健的技术,用于开发可扩展的主 Web 应用程序,包括后端、前端和数据库组件。根据作者、类别等过滤文章 示例 回购 👉 https://github.com/qbentil/bentility 演示 👉 https://bentility.vercel.app/有大量 MERN 堆栈项目想法可用于增强您对 MERN 堆栈开发的实践知识。样本回购 👉 https://github.com/shabraware/HEIN。 阅读详情

大家好👋!本文我将介绍 Mern Stack 中的身份验证。

登录/注册或者我会说身份验证是任何应用程序的基础之一,无论它是 Web 应用程序还是 Android 应用程序。在本教程中,您将使用 MERN Stack 学习此身份验证。我们将使用 MERN 堆栈创建一个最小的全栈登录/授权应用程序(MongoDB 用于我们的数据库,Express 和 Node 用于我们的后端,React 用于我们的前端)。

我们将借助 Express js 创建身份验证端点,并建立 MongoDB 连接以将用户数据存储在其中。我们将在前端使用 react 和 react-hook 进行状态管理。

应用功能

  • 注册
  • 登录
  • 访问受保护的页面
  • 登出

在本文中,我将介绍:

  • 使用 npm 设置我们的后端并安装必要的软件包。
  • 使用 MongoDB Atlas 设置数据库。
  • 使用 Mongoose 为用户创建数据库模式。
  • 创建注册路线并将数据保存到数据库。

先决条件

您至少应该对基本的编程概念有基本的了解,并且对介绍性 HTML/CSS/Javascript 有一定的经验。在开始之前,请安装我们设置应用程序所需的所有工具。

  • Nodejs
  • Mongodb
  • Create-React-App
  • Visual Studio Code 或您最喜欢的编辑器
  • Postman(API 测试)

让我们开始吧 !

设置后端

在您的工作区中创建一个项目文件夹以构建 REST API(后端)并运行以下命令。

npm init

您可以安全地通过其中的大部分。运行命令后,会创建 package.json

使用命令安装以下依赖项:

npm i express mongoose nodemon

Express :Express 是一个 nodejs Web 应用程序框架,有助于创建 REST API。

Mongoose :Mongoose 是一个用于 MongoDB 和 Node.js 的对象数据建模 (ODM) 库。Node.js 允许您与 MongoDB 数据库进行交互。

Nodemon :Nodemon 是一个工具,通过在文件更改时自动重新启动节点应用程序来帮助开发基于 node.js 的应用程序。

在文件夹中创建文件 app.js 并编写以下代码。

const express=require('express')
const app=express()
const PORT=5000


app.get('/',(req,res)=>{
    res.send("hello world")
})

app.listen(PORT,()=>{
    console.log("Server is running on",PORT)
})

在代码中,我们基本上是在 localhost 的 5000 端口创建一个服务器。这个应用程序启动一个服务器并在端口 5000 上侦听连接。该应用程序响应“Hello World!” 对根 URL (/) 或路由的请求。对于其他所有路径,它将以 404 Not Found 响应。

转到命令行并运行命令:

nodemon app

您将在命令行中看到一条消息:

现在,打开您的浏览器并转到“ localhost:5000 ”,您将看到如下内容:

哇哦😍…您已成功创建服务器。

将我们的服务器连接到数据库

下一步是创建一个 MongoDB atlas 帐户。您可以借助本 教程 或此 视频 来创建帐户。

创建帐户后,获取 mongodb 的 url。您的网址如下所示:

mongodb+srv://<username>:<password>@cluster0.suxf5.mongodb.net/<dbname>?retryWrites=true&w=majority

将 MongoDB atlas cloud 的用户名(和密码)替换为您创建的数据库名称()。

接下来,我们将测试我们的 MongoDB 与我们的 express 服务器的连接。在我们的 index.js 文件中添加以下代码。

现在,创建一个 keys.js 文件并将 mongourl 保存在那里,如下所示:

让我们将刚刚创建的服务器连接到我们的数据库。

为此,我们必须使用 mongoose.connect() 方法,如下所示:

如果初始连接失败,Mongoose 将发出一个 ‘error’ 事件,并且承诺 mongoose.connect() 返回将拒绝。

Mongoose.connect 将与提到的 url 建立连接,我们将使用 mongoose.connection.on() 方法检查连接。

当您进入命令行时,您将看到正在连接到数据库的消息。

恭喜👍🤩!您刚刚将服务器连接到数据库。

定义模式

现在,下一步是创建数据库模式。我们将在 Mongoose.Schema() 的帮助下创建一个数据库模式。

创建一个文件夹 models 并在该文件夹中创建一个名为 user.js 的文件。它将包含我们的用户 model/schema 。

您需要创建一个新模式并定义您希望为用户提供的各种字段。例如,在用户模式中,您将有一个字段作为名称,然后您需要定义其类型和其他内容,例如必需的、唯一的或任何默认值。最后,您必须使用 mongoose.model 创建该模式的模型,该模型采用参数名称和它指向的模式。

创建注册路线

我们将为注册页面创建路由,用户将从前端发送带有数据的发布请求,并且该数据将保存在我们的数据库中。REST Api 端点中使用了四种主要的 HTTP 方法:

  • GET :GET 请求是 API 和网站中最常见和广泛使用的方法。简单地说,GET 方法用于从指定资源的服务器检索数据。
  • POST :在 Web 服务中,POST 请求用于将数据发送到 API 服务器以创建或更新资源。发送到服务器的数据存储在 HTTP 请求的请求正文中。
  • DELETE :DELETE 方法就像它听起来的那样:删除指定 URL 处的资源。此方法是 RESTful API 中较常见的方法之一,因此最好了解它的工作原理。
  • PUT :与 POST 类似,PUT 请求用于向 API 发送数据以更新或创建资源。不同之处在于 PUT 请求是幂等的。也就是说,多次调用同一个 PUT 请求总是会产生相同的结果。相反,重复调用 POST 请求会产生多次创建相同资源的副作用。

我们将向注册路由发送发布请求,以便我们的数据保存/发布到我们的数据库中。路由是指应用程序的端点 (URI) 如何响应客户端请求。

您使用与 HTTP 方法对应的 Express 应用程序对象的方法定义路由;例如,app.get() 处理 GET 请求和app.post处理 POST 请求。

应用程序“监听”与指定路由和方法匹配的请求,当它检测到匹配时,它调用指定的回调函数。路由路径与请求方法相结合,定义了可以发出请求的端点。路由路径可以是字符串、字符串模式或正则表达式。

为路由创建一个文件夹和一个用于创建路由的文件。需要包并在 express.Router() 的帮助下创建路由。

const express=require('express');
const router=express.Router();
const mongoose=require("mongoose")
const User=mongoose.model("User")

router.get('/signup',(req,res)=>{
      res.send("hello");
})

module.exports=router

在上面的代码中,在 localhost:5000/signup 设置了一个路由,当我们向上面的路径发送一个 get 请求时,它里面的代码就会运行。

需要我们 app.js 中的文件并使用 app.use() 创建一个中间件。此外,使用 express.json() 将该数据转换为 json 对象。在这里,我在路由文件夹中的文件中的 auth.js。

在这种情况下,你好会印在屏幕上,如下所示:

如果这显示在您的浏览器上,那么您已经成功创建了一个注册路径。现在,是时候为该路由创建一个发布请求了。添加以下代码以创建发布请求。

router.post('/signup',(req,res)=>{
    var {name,email,password}=req.body
    console.log(req.body)
    if(!email || !password || !name)
    {
        return res.status(422).json({error:"Add all data"})
    }
  return res.status(200).json({message:"DONE  !"})
})

我们将通过 Postman 发送要发布的数据。这是教程。通过 post 请求发送到服务器的数据存储在请求的正文中,我们可以使用 req.body() 访问该数据。我们发送了一个 json 数据,例如:

发送请求后,我们需要使用 {} 解构该数据。

var {名称、电子邮件、密码}=req.body

这基本上从 body 获取数据并保存到相应的变量中。如果该字段中的任何一个字段不可用,则它将发送状态为 422 的错误消息。

在 postman 中,尝试使用 body 中的 json 数据向 localhost:5000/signup 发送 post 请求。您将在 postman 中看到以下 DONE 消息。

现在,由于我们可以访问数据,我们将把它保存到我们的数据库中。为此,我们将首先检查是否存在具有相同邮件的用户。如果它不存在,我们将创建一个用户(模型)类型的对象,其中包含我们已经解构的数据。

之后,使用 User.save() 保存用户。一旦执行,它将返回一个错误,我们将在 catch 博客中捕获该错误,或​​者返回已保存的用户。我们将使用 .then 进行检查,并使用 catch 块来捕获任何类型的错误。如果该邮件的数据存在,则会显示错误。

完整代码是:

const express=require('express');
const router=express.Router();
const mongoose=require("mongoose")
const User=mongoose.model("User")

router.get('/signup',(req,res)=>{
    res.send("hello");
});

router.post('/signup',(req,res)=>{
    var {name,email,password}=req.body
    console.log(req.body)
    if(!email || !password || !name)
    {
        return res.status(422).json({error:"Add all data"})
    }
    User.findOne({email:email})
   .then((savedUser)=>{
       if(savedUser){
            return res.status(422).json({error:"User already exists with that email"})
       }
       const user=new User({
        email,
        password,
        name,
    })
    user.save()
    .then((user)=>{
        res.json({message:"Saved Successfully"})
        console.log(user.email)
    })
    .catch((err)=>{
        console.log(err)
    })
})
.catch((err)=>{
    console.log(err)
})
})

module.exports=router

现在,当您从 Postman 发送请求时,数据将保存在我们的数据库中。保存数据后,消息将显示在我们的 Postman 中。

你可以查看Mongodb Atlas中的文档,你的数据会有一个文档。如果你能看到那么非常祝贺你。您已成功将数据发布到您的数据库😍🤩。

前端埋点的实践 1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段 阅读详情

相关推荐

Unity-Chan Toon Shader卡通渲染学习

2.0 (UTS2)是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。二、从0-1复刻UTS21.漫反射UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

qq_63133691的博客 2543

MongoDB 基础知识(七)

首先,连接到作为的一部分设置的 MongoDB 集群,在 Atlas 上设置您的第一个免费 MongoDB 集群。它应该看起来像这样:在命令提示符上输入前面的命令,并在提示时提供密码。成功登录后,您应该看到带有您的集群名称的 shell 提示,类似于这样:现在,创建电影数据库并将其命名为moviesDB。利用use命令:创建一个带有几个相关属性的movies集合。通过将文档插入不存在的集合来创建集合。鼓励您考虑并实现您认为最合适的集合和属性:},使用find命令获取您在上一步中插入的文档,即。

龙哥盟 2047

从零搭建Simulink-Adams联合仿真平台:实现电机转速的精准闭环控制

本文详细介绍了从零搭建Simulink-Adams联合仿真平台的完整流程,旨在实现电机转速的精准闭环控制。通过将Simulink的控制算法与Adams的物理模型相结合,构建了一个包含真实机械效应的数字孪生系统。文章涵盖了Adams物理模型构建、接口定义、Simulink控制闭环搭建、PID参数调试以及常见避坑指南,为机电系统仿真提供了实用的工程实践指导。

weixin_29189373的博客 153

WEB实战:使用MERN技术栈开发项目

前言 本文介绍如何使用 MERN 技术栈开发一个前后端分离的电商项目,水平有限,不足之处,请指出,Github。 后端开发 安装好 mongodb 并启动, 新建一个后端项目目录, 目录结构如下 当然也可以按自己的方式建立, 执行 npm init 后,安装需要用到的库 npm i express mongoose multer validator jsonwebtoken dotenv cor...

weixin_34293059的博客 1418

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

qq_36773158的博客 4656

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

mongodb+srv://一共包含哪些部分?使用场景是什么?底层原理是什么?

是 MongoDB 3.6 引入的,通过 DNS SRV 和 TXT 记录自动发现集群节点和配置。它主要用于云环境或托管服务(如 MongoDB Atlas),简化客户端配置并动态适配集群拓扑变化。

长风破浪会有时的博客 883

5、Raspberry Pi CPU架构与多线程编程详解

本文详细介绍了Raspberry Pi的CPU架构(包括ARMv6Z、ARMv7-A和ARMv8-A),通过/proc/cpuinfo解析硬件信息,并深入探讨了多线程编程的核心技术。内容涵盖pthread库的使用,如线程创建、属性设置、等待与分离、线程同步机制(互斥锁),以及实际应用场景如多媒体处理和网络服务。同时强调了线程安全、死锁预防和资源管理等关键注意事项,帮助开发者在Raspberry Pi上构建高效稳定的多线程应用。

sre5engineer的博客 95

Mongodb环境搭建

mongo 提供了一个cloud,可以给每个人免费提供512m、3个节点使用 create a starter cluster

CelineT的博客 786

节省人力成本40%!仓储物流AI机器人调度系统实战案例(含路径规划算法与系统架构图)

首先,我们需要定义一个Node类self.x = x # 节点x坐标self.y = y # 节点y坐标self.g = g # 从起点到当前节点的实际成本(g值)self.h = h # 从当前节点到终点的启发式成本(h值)self.f = g + h # 总成本(f值)self.parent = None # 父节点(用于回溯路径)self.task_id = task_id # 任务IDself.priority = priority # 任务优先级(1=最高,5=最低)

小程序开发 950

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3822

连接 mongodb集群的集中方式

假设您有一个 MongoDB 集群,域名为 example.com,并且集群中有三个节点:node1.example.com、node2.example.com 和 node3.example.com。是 MongoDB 连接字符串中的一种格式,用于指示 MongoDB 驱动程序使用 DNS SRV 记录来查找 MongoDB 集群的地址信息。连接字符串,您可以只提供集群的域名而不是具体的主机名和端口号,MongoDB 驱动程序将自动查找 DNS 中的 SRV 记录来获取集群的连接信息。

galoiszhou的博客 1309

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 195

使用 MERN 堆栈构建登录/注册 - 第 1 部分(后端):用 TaoToken 统一 Key 打通 API 配置

MERN 后端登录/注册接入 AI 能力时,用 TaoToken 统一 Key 收敛分散配置。本文给出 settings.json 与 config.toml 两份可复制骨架,并在 Express 鉴权路由中跑通连通性验证,避免 401 与超时排查成本。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_35756892的博客 237

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

mern全栈开发pdf_使用Mern堆栈第1部分后端进行用户身份验证

mern全栈开发pdfIn this tutorial, we will be creating a simple application for user authentication using MERN Stack(MongoDB for our database, Express and Node for our backend, and React for our frontend). ...

weixin_26704651的博客 490

jre9下载 jdk9

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

AI视频教程下载:用ChatGPT和 MERN 堆栈构建 SAAS 项目

你将探索打造智能解决方案的艺术,深入研究 ChatGPT 的复杂性,这是你的 AI 驱动内容生成引擎的核心。在整个这个掌握课程中,你不仅将获得构建 SAAS 项目的实践经验,还将深入了解关键概念,如认证、订阅管理、付款历史和内容生成跟踪。这是一个关于 掌握ChatGPT 开发应用的全面课程,它将带领你进入 AI 驱动的 SAAS 项目的沉浸式世界。该课程旨在使你具备使用动态的 MERN 堆栈和无缝的 Stripe 集成来构建强大的 SAAS 平台所需的技能。

AIGCTribe的博客 884

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

探索全功能的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 E-COMMERCE 教程 - 构建全栈电商应用

推荐:MERN E-COMMERCE 教程 - 构建全栈电商应用 在这个开放源代码的世界中,找到一个完整且详细的教程来学习和实践最新的 Web 开发技术是至关重要的。由 Abhishek Singh 创建的MERN E-COMMERCE TUTORIAL是一个完美的起点,它将引导你深入理解并掌握 MERN 堆栈(MongoDB, Express, React, Node.js)在构建电子商务网站中...

gitblog_00080的博客 385

MERN 技术栈高级教程(九)

原文:Pro MERN Stack 协议:CC BY-NC-SA 4.0 十四、认证 大多数应用需要识别和验证用户。我们将集成一个社交登录,而不是创建一个自定义的注册和验证机制。我们将只实现一个(谷歌网站登录)。这将为其他集成提供一个很好的例子,因为它使用了 OAuth2 机制,大多数其他认证集成也使用这种机制。 我们将使用户无需登录即可查看所有信息,但为了进行任何更改,他们必须登录。我们将使用一个模态对话框,让用户从应用的任何地方登录 Google。一旦登录,应用将让用户停留在相同的页面,以便他们可以

龙哥盟 962

密码重置功能全解析:使用mern-advanced-auth构建安全的用户找回流程 [特殊字符]

在现代化的Web应用中,密码重置功能是用户认证系统中至关重要的安全组件。本文将深入解析如何使用mern-advanced-auth项目构建一个完整、安全的密码重置流程,帮助开发者理解如何为用户提供便捷且可靠的密码找回服务。无论你是MERN堆栈的初学者还是经验丰富的开发者,本文都将为你提供实用的实现指南和最佳实践。 ## 📋 为什么密码重置功能如此重要? 密码重置是现代Web应用不可或缺的安全

gitblog_00241的博客 975

jwt 刷新令牌_使用JWT和刷新令牌进行身份验证—第1部分。

jwt 刷新令牌Authentication using JWT (JSON Web Token) is very useful for developing cross-platform applications. The flow of the authentication process is : 使用JWT(JSON Web令牌)进行身份验证对于开发跨平台应用程序非常有用。 身份验证过程的...

weixin_26750481的博客 3583

实践:基于Azure部署Jenkins服务并开发MERN应用的CI/CD构建管道

点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践3月14日晚上8:00分享《使用Terragrunt优化Terraform代码》点击下方预约按钮,预约直播今天是「DevOps云学堂」与你共同进步的第 2天关注公众号,回复 devops,免费加入DevOps学习群获得问题解析、DevOps解决方案指导随着开发软件,还必须将其与以前的代码持续集成并将其部署到服务器。手动执行此操作是一...

DevOps持续集成的博客 606

NodeJS 移动应用开发学习手册(一)

原文:zh.annas-archive.org/md5/4B062FCE9E3A0F235CC690D228FCDE03 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 MERN 堆栈可以被视为共享一个共同点的一组工具,即语言 JavaScript。本书以食谱的形式探讨了如何使用 MERN 堆栈构建遵循 MVC 架构模式的 Web 客户端和服务器应用程序。 MVC 架构模式的模型和控制器由关于使用 ExpressJS 和 Mongoose 构建 RESTful API 的章节涵盖。这些章节涵盖了

龙哥盟 1208

React 全栈项目(三)

在这一章中,我们开始使用 MERN 堆栈构建一个在线市场应用程序。MERN 骨架被扩展以向用户添加卖家角色,这样他们就可以创建商店并向每个商店添加产品,以便向其他用户出售。我们还探讨了如何利用堆栈来实现产品浏览、搜索以及对有兴趣购买的普通用户提出建议等功能。但是,一个市场应用程序如果没有购物车用于结账、订单管理和支付处理就是不完整的。在下一章中,我们将扩展我们的应用程序以添加这些功能,并了解更多关于如何使用 MERN 堆栈来实现电子商务应用程序的核心方面。

龙哥盟 1054

React 全栈项目(二)

Home Page</Card>

龙哥盟 1389
上一篇: 使用 WorkManager 实现定期通知
下一篇: Clean Architecture - 规划和初始设置
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值