在前端html页面中向服务器发送post登录请求

news2024/10/5 16:30:15

目录

前言

搭建服务器

搭建前端登录页面

获取表单值

使用axios发送post登录请求


前言

一般在html页面中向服务器发送post请求的模块为登录请求,本文将介绍如何向服务器发送post请求

搭建服务器

如何搭建服务器请看JWT认证这篇文章,有详细的解说。这里之所以使用JWT认证是因为在前端html页面发起post请求会有跨域问题。这里直接附上完整代码

// 导入express模块
const express = require('express')
// 创建express服务器实例
const app = express()

// 导入jwt相关的包
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')

// 允许资源跨域共享
const cors = require('cors')
app.use(cors())

// 解析post提交的表单数据
app.use(express.urlencoded({extended:false}))

// 定义secret密钥
const secretKey= 'notbald'

// 登录接口
app.post('/post',(req,res)=> {
    const userinfo = req.body
    if(userinfo.username !=='admin'||userinfo.password!=='000000'){
        return res.send({
            status:400,
            msg:'登录失败',
            hh:userinfo
        })
    }
    const tokenStr = jwt.sign({username:userinfo.username},secretKey,{expiresIn:'60s'})
    res.send({
        status:200,
        msg:'登录成功',
        token:tokenStr
    })
})

// 将JWT字符串还原为JSON对象
app.use(expressJWT.expressjwt({
    secret:secretKey,
    algorithms:["HS256"]
}))

// get请求
app.get('/get',(req,res)=>{
    res.send({
        status:200,
        message:'获取用户信息成功',
        data:{
            username:req.auth.username
        }
    })
})

// 使用全局错误处理中间件,捕获解析 JWT 失败后产生的错误
app.use((err, req, res, next) => {
    // 这次错误是由 token 解析失败导致的
    if (err.name === 'UnauthorizedError') {
      return res.send({
        status: 401,
        message: '无效的token',
      })
    }
    res.send({
      status: 500,
      message: '未知的错误',
    })
  })

// 启动服务器
app.listen(3000,()=> {
    console.log('server running the localhost http://127.0.0.1:3000')
})

注意,这里不要使用80端口,如果使用80端口,当发起post请求时服务器引入了cors仍然会报跨域问题

搭建前端登录页面

html

<form action="" name="myform" class="myform">
    <div>用户名:<input type="text" placeholder="输入用户名" id="name"></div>
    <div>密 码:<input type="password" placeholder="输入密码" id="pwd"></div>
    <button id="login" type="submit">登录</button>
   </form>

css

 body {
            background-color: yellowgreen;
        }
        form {
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            align-items: center;
            width: 300px;
            height: 200px;
            border: 1px solid gray;
            margin: 200px auto;
            border-radius: 5px;
            background-color: #fff;
            box-shadow: 15px 15px 15px gainsboro;
        }
        input {
            width: 200px;
            height: 30px;
            border: none;
            border-bottom: 1px solid black;
        }
        input:focus{
            outline: none;
        }
        button {
            width: 60px;
            height: 30px;
            background-color: skyblue;
            cursor: pointer;
            border: none;
            border-radius: 5px;
            margin-left: 40px;
        }

效果图

获取表单值

首先需要先引入axios

获取表单中的值

//获取用户名的value值
const  text = document.querySelector('#name').value

//获取密码框的value值
const pwd = document.querySelector('#pwd').value

给登录按钮绑定点击事件,并在点击登录时打印用户输入的值

 document.querySelector('#login').addEventListener('click', function(e) {
        e.preventDefault()
        
        console.log(text);
        console.log(pwd);
    })

注意,当提交时,需要阻止默认事件发生,否则会自动刷新页面

 e.preventDefault()

但当我们点击登录按钮时发现,获取到的是空值

当我们在函数内定义获取到的表单中的值时,然后再打印

 document.querySelector('#login').addEventListener('click', async function(e) {
        e.preventDefault()
        const  text = document.querySelector('#name').value
        const pwd = document.querySelector('#pwd').value
        console.log(text);
        console.log(pwd);
    })

成功获取到了值

原因是如果在函数外定义,那么在页面加载时会运行一次改代码,而此时的表单内是没有任何值的,所以当点击登录时获取到的是空值

使用axios发送post登录请求

打印从服务器发过来的信息

const res = await axios({
            url:'http://127.0.0.1:3000/post',
            method:'post',
            data:({
                    username:text,
                    password:pwd
                })
        })
        console.log(res);

当我们输入正确的账号密码时发现(账号:admin 密码:000000  在服务器中写死的账号密码)

返回来的却是登录失败,所以我们查看一下后端服务器接受到的是什么数据,并向客户端发送

我们发现服务器接受到的是空值

原因是发送过去的数据格式问题,这里需要引入qs.stringfy(data),将传过去的对象格式化为字符串

直接在终端安装qs

npm install qs

然后引用

const res = await axios({
            url:'http://127.0.0.1:3000/post',
            method:'post',
            data:Qs.stringify({
                    username:text,
                    password:pwd
                })
        })
        console.log(res);

引入qs库以后,服务器可以成功获取到客户端的数据

根据服务器返回的status状态码使用window.location.href='跳转页面路径'来进行页面的跳转

if(res.data.status == 200){
        alert('登录成功')
        window.location.href='退出.html'
       }else {
        alert('登录失败')
       }

完整代码

 document.querySelector('#login').addEventListener('click', async function(e) {
        e.preventDefault()
        const  text = document.querySelector('#name').value
        const pwd = document.querySelector('#pwd').value
        const res = await axios({
            url:'http://127.0.0.1:3000/post',
            method:'post',
            data:Qs.stringify({
                    username:text,
                    password:pwd
                })
        })
        if(res.data.status == 200){
        alert('登录成功')
        window.location.href='退出.html'
       }else {
        alert('登录失败')
       }
    })

这样就完成登录的post请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1110419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

垃圾邮件(短信)分类算法实现 机器学习 深度学习 计算机竞赛

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 垃圾邮件(短信)分类算…

SVN一直报错Error running context: 由于目标计算机积极拒绝,无法连接。解决办法【杭州多测师_王sir】...

一、发现SVN一直报错Error running context: 由于目标计算机积极拒绝&#xff0c;无法连接。 二、没有启动 VisualSVN Server。cmd--> services.msc打开本地服务。查看VisualSVN的三个服务的启动类型&#xff0c;建议选择“手动”&#xff0c;不能选择“禁用”&#xff0c;选…

跨境电商自养号测评:如何配置安全可靠的网络环境?

随着全球化的加速和互联网的普及&#xff0c;跨境电商已经逐渐成为全球电子商务的主流形式。越来越多的企业开始涉足跨境电商领域&#xff0c;希望通过跨越国界的贸易活动来扩大市场份额、提高品牌影响力&#xff0c;以及增加企业收益。 然而跨境电商是一个充满机遇和挑战的领…

C++入门(c++历史篇)

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 重点 1. 什么是C2. C的发展…

《计算机病毒技术及其防御》 第一章 课后练习详解

简述计算机病毒定义及相关起源。 计算机病毒&#xff08;狭义的&#xff09;定义为&#xff1a;计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据&#xff0c;影响计算机使用&#xff0c;并能自我复制的一组计算机指令或者程序代码。 广义的计算机病毒&…

如何用云服务器搭建网站、多个站点(不使用域名仅用公网IP)---保姆级教学

前言 本篇文章帮助初学者小白搭建网站及站点 本人也是刚刚接触这个领域&#xff0c;希望能帮助到大家。 文章目录 前言1.购买服务器2.部署工作3.安装宝塔面板4.利用公网IP搭建站点5.如何搭建多个站点和网站&#xff1f; 1.购买服务器 链接: 阿里云服务器官网 2.部署工作 …

21天打卡掌握java基础操作

Java安装环境变量配置-day1 参考&#xff1a; https://www.runoob.com/w3cnote/windows10-java-setup.html 生成class文件 java21天打卡-day2 输入和输出 题目&#xff1a;设计一个程序&#xff0c;输入上次考试成绩&#xff08;int&#xff09;和本次考试成绩&#xff0…

博睿数据 Bonree ONE 秋季产品发布会,即将震撼启幕!

云原生、Devops等技术的发展&#xff0c;为企业的生产与发展带来极大好处的同时分布式架构的增加、繁琐的数据、复杂的依赖关系和弹性架构等&#xff0c;都进一步增加了运维的压力和复杂度。如何降低运维的复杂度&#xff0c;释放运维工作潜能&#xff0c;提升工作效率&#xf…

实时配送跟踪功能的实现:外卖跑腿小程序的技术挑战

在当今数字化时代&#xff0c;外卖和跑腿服务已经成为了生活中不可或缺的一部分。为了提供更好的用户体验&#xff0c;外卖跑腿小程序越来越注重实时配送跟踪功能的实现。这项技术挑战旨在确保顾客可以方便地跟踪他们的订单&#xff0c;以及配送员可以高效地完成送货任务。本文…

基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(五)FineBI可视化

文章目录 22&#xff1a;FineBI配置数据集23&#xff1a;FineBI构建报表24&#xff1a;FineBI实时配置测试附录二&#xff1a;离线消费者完整代码 22&#xff1a;FineBI配置数据集 目标&#xff1a;实现FineBI访问MySQL结果数据集的配置 实施 安装FineBI 参考《FineBI Windows…

使用Nginx可视化管理工具+Cpolar在本地搭建服务器并实现远程访问【内网穿透】

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具&#xff0c;不需要了解太多 Nginx 或 Letsencrypt 的相关知识&#xff0c;即可快速将你的服务暴露到外…

【MyBatis】mvc模式以及Mapper文件中的namespace以及ORM思想

目录 什么是MVC三层架构&#xff0c;初步了解&#xff1f; namespace的作用是什么&#xff1f; Mapper文件中的namespace&#xff1f; ORM思想&#xff08;对象关系映射思想&#xff09; 其中提供了一套映射规则和API 什么是MVC三层架构&#xff0c;初步了解&#xff1f; 三…

谷歌浏览器多版本切换测试兼容性

谷歌浏览器多版本切换测试兼容性 在开发过程中&#xff0c;我们常常会出现浏览器兼容问题&#xff0c;客户的浏览器版本参差不齐&#xff0c;只有对应版本的浏览器才会出现对应的问题&#xff0c;所以我们需要在本地通过切换不同的浏览器来测试对应的问题。本篇内容就是介绍不用…

投资理财:增额终身寿的优点和缺点

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家继续探讨一下最近理财爆火的增额终身寿&#xff0c;你是真的了解增额终身寿的本质吗&#xff1f; 一、增额寿3.0%的利率真的吸引人吗&#xff1f; 身边有很多富有的成功人士以及财经博主都开始购买增额终身寿保险&#xf…

中国人民大学与加拿大女王大学金融硕士庞雪雨:行学之道,在自律、在勤勉、在止于至善

庞雪雨 中国人民大学-加拿大女王大学金融硕士2022-2023级行业高管班 光大保德信资产管理有限公司董事总经理 当我进入到人大校园的那一刻&#xff0c;映入眼帘的是明德楼&#xff0c;由此我想到了《大学》&#xff0c;大学开篇中讲到&#xff0c;大学之道&#xff0c;在明明德…

Maven 基础教程系列

Maven是一个项目开发管理和理解工具。基于项目对象模型的概念&#xff1a;构建、依赖关系管理、文档创建、站点发布和分发发布都由pom.xml声明性文件控制。Maven可以通过插件进行扩展&#xff0c;以使用许多其他开发工具来报告或构建过程。 一、Maven 使用教程-CSDN博客 二、…

电源芯片测试规范是什么?如何测试电源芯片输入电压范围?

电源芯片测试贯穿着研发、设计、生产过程的始终&#xff0c;目的就是为了通过反复检测来确保电源芯片的性能、质量和可靠性&#xff0c;保证正常工作运行。电源芯片测试涉及到许多测试项目&#xff0c;并且有着具体的测试规范标准和方法。本文纳米软件将介绍电源芯片输入电压范…

Flutter视图原理之StatefulWidget,InheritedWidget

目录 StatefulElement1. 构造函数2. build3. _firstBuild3. didChangeDependencies4. setState InheritedElement1. Element类2. _updateInheritance3. InheritedWidget数据向下传递3.1 dependOnInheritedWidgetOfExactType 4. InheritedWidget的状态绑定4.1. ProxyElement 在f…

为中小企业的网络推广策略解析:扩大品牌知名度和曝光度

目前网络推广已经成为企业获取潜在客户和提升品牌知名度的重要手段。对于中小企业而言&#xff0c;网络推广是一个具有巨大潜力和可行性的营销策略。在本文中&#xff0c;我们将探讨中小企业为什么有必要进行网络推广&#xff0c;并分享一些实用的网络推广策略。 一、扩大品牌知…