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

这篇具有很好参考价值的文章主要介绍了在前端html页面中向服务器发送post登录请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

搭建服务器

搭建前端登录页面

获取表单值

使用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;
        }

效果图

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

获取表单值

首先需要先引入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()

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

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

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

 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);
    })

成功获取到了值

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

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

使用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  在服务器中写死的账号密码)

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

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

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

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

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

原因是发送过去的数据格式问题,这里需要引入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库以后,服务器可以成功获取到客户端的数据

在前端html页面中向服务器发送post登录请求,Node,前端,node.js

根据服务器返回的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请求文章来源地址https://www.toymoban.com/news/detail-714591.html

到了这里,关于在前端html页面中向服务器发送post登录请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • html5学习笔记19-SSE服务器发送事件(Server-Sent Events)

    https://www.runoob.com/html/html5-serversentevents.html 允许网页获得来自服务器的更新。类似设置回调函数。 demo_sse.php demo_sse.aspx

    2024年02月09日
    浏览(33)
  • [C++项目] Boost文档 站内搜索引擎(5): cpphttplib实现网络服务、html页面实现、服务器部署...

    在前四篇文章中, 我们实现了从文档文件的清理 到 搜索的所有内容: 项目背景: 🫦[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 文档解析、处理模块 parser 的实现: 🫦[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对

    2024年02月13日
    浏览(30)
  • 关于 java如何集成chatgpt,如何集成到html5前端界面,如何实现多伦对话,如何申请域名,如何申请服务器,搭建环境(一)

    Java如何集成ChatGPT,如何集成到HTML5前端界面,如何实现多伦对话 随着人工智能技术的不断发展,聊天机器人已经成为了人们日常生活中不可或缺的一部分。ChatGPT是一种基于自然语言处理技术的聊天机器人,它可以通过对话来理解用户的需求,并给出相应的回答。在本文中,

    2024年02月03日
    浏览(59)
  • 使用ajax向服务器发起post请求(提交数据给服务器)

     一、jQuery中发起Ajax请求的三种方法:        功能 简介:         1、$get():功能单一,专门用来发起get请求,从而将服务器上的资源“请求”到客户端来进行使用。         2、$post():功能单一,专门用来发起post请求,从而向服务器“提交”数据。         3、$ajax():是

    2024年02月12日
    浏览(30)
  • linux 服务器执行post请求 curl命令详解

    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出“stdout”上面,可以用它来构造http request报文,curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。 基本语法: curl [option] [url] 实际用法 PO

    2024年02月02日
    浏览(32)
  • Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流

    Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流: Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流_win nginx-rtmp最新版_霸道流氓气质的博客-CSDN博客 Vue中使用vue-video-player和videojs-flash插件实现播放rtmp视频文件流: Vue中使用vue-video-player和videojs-flash插件实现播放

    2024年02月03日
    浏览(32)
  • 【python】request.post报错显示服务器内部错误500

    今天遇到一个问简单的问题,我通过pycharm发送post请求的时候,总是报500错误,提示服务器内部错误。但是我用postman尝试请求的时候,是能够返回的。 网上找了一下,发现是参数的配置的问题。 原始的代码: 参考如下博主的解决方式: 点我 更改之后的代码: 问题得到解决

    2024年02月12日
    浏览(30)
  • 服务器发送http请求

    1、发送GET请求 curl localhost:9009/setCreateDataItem?a=1b=nihao 2、发送POST请求 3、发送json格式请求: 其中, -H 代表header头, -X 是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH), -d 代表传输什么数据。这几个是最常用的。 查看所有curl命令: man curl或者curl -h 请求头:H,A,e 响应头:I,i,D

    2024年01月25日
    浏览(32)
  • QT实现客户端服务器HTTP(get请求、post请求)

    服务器代码如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客户端代码: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序运行效果: GET请求: POST请求: POST请求使用postman测试: 注意: 可以发现,在使用postman进行POST请求发送时,服务器接收到的请求头与QTSocket的POST请求的请求头

    2023年04月22日
    浏览(44)
  • 【服务器】搭建hMailServer 服务实现远程发送邮件

    hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工具即可实现远程发送邮件,不需要使用公网服务器,不需要域名,而且邮件账号名称可以自定义. 下面以windows 10系统为环境,介绍使用方法: 1. 安装hMailServer 进入官方下载:https://www.hmailserver.com/do

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包