位置: IT常识 - 正文

前端发起请求,后端响应请求的整个过程(前端发起请求怎么设置)

编辑:rootadmin
前端发起请求,后端响应请求的整个过程 文章目录前端注册页面axios 请求方法URL 路径配置自定义 axios方法封装后端创建服务器模块接口方法模块连接数据库

推荐整理分享前端发起请求,后端响应请求的整个过程(前端发起请求怎么设置),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端发起请求,前端发起请求怎么设置,前端发起请求 后端 执行完通知,前端发起请求很久才相应怎么回事,前端发起请求,控制层业务层和数据层的流程,前端发起请求怎么到后端的mvc,前端发起请求的方式,前端发起请求,内容如对您有帮助,希望把文章链接给更多的朋友!

本文分为:前端、后端两部分讲诉。以下是前端发送请求到服务器,服务器响应前端,的整个过程的图解:

前端

前端主要是发起请求,本文使用自定义的axios请求方法,分为注册页面模块、axios 请求方法模块两部分。

前端运行地址: http://localhost:8080/

注册页面

该页面主要是通过点击提交按钮,触发点击事件,发起注册请求。

目标端口是:http://localhost:3000/api/login,协议、域名、端口号之中,存在端口号与前端运行地址不一样,满足跨域请求的条件。后端部分会讲到:如何解决跨域问题。

<el-button type="primary" @click="submitForm('loginForm')">提交</el-button>

点击提交,触发并传递给submitForm方法参数loginForm。其中,loginForm数据形式是

loginForm:{ username:"", pass:"",}

第 7 行,submitForm发起请求,调用自定义的axios方法:api.login(){}

import api from "@/api"submitForm(formName) { this.$refs[formName].validate((valid)=> { if(valid){ if(this.currentIndex==='login'){ api.login(this.loginForm).then(res=>{ // 用户登陆成功 if(res.data.status === 200){ //用户信息存储到 vuex 和 localstorage this.setUser(res.data) localStorage.setItem('hp',JSON.stringify(res.data)) this.$notify({ title: '登录成功', type: 'success' }); // 用户登陆成功跳转到home页面 this.$router.push('/') }else{ this.$notify.error({ title: '登录失败', message: '请重新登录' }); } }) } if(this.currentIndex==='register'){ api.register(this.registerForm).then(res =>{ console.log(res) if(res.data.status === 200){ this.$notify({ title: '注册成功', type: 'success' }); } }) } }else{ return ; } })}axios 请求方法前端发起请求,后端响应请求的整个过程(前端发起请求怎么设置)

为了请求方法的应用性更强,选择自定义请求的方式编写封装请求。

考虑到模块开发、代码可读性的好处,将请求方法封装模块分为路径配置、自定义 axios、API封装三部分。

URL 路径配置

每次请求都使用以下预定义的路径,该文件向外导出base对象

const base = { baseUrl: "http://localhost:3000", register: "/api/register",//用户的接口 login: "/api/login", selectTbItemAllByPage: '/api/backend/item/selectTbItemAllByPage',//商品列表请求路径 total: "/api/total",//商品总条数 search: "/api/search" //商品 模糊查询}export default base自定义 axios

自定义axios 易用、简洁且高效的http库,对发起的axios请求和响应进行拦截

// /api/utils/request.js 文件import axios from "axios// 引入qs模块,用来序列化post类型的数据import qs from 'qs'import router from "@/router"//主要步骤:三步// 1.创建一个axios实例// 2.拦截器--请求拦截// 3.拦截器--响应拦截// 1.创建一个axios实例const instance = axios.create({ timeout: 5000, //超时处理,超过时间告诉用户超时 // baseURL: "http://localhost:3000",})instance.all = axios.all;instance.spread = axios.spread// 设置post的请求头instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';// interceptors 拦截器// 2.请求拦截 做一个逻辑后再把请求发送,可以用于配置公用的逻辑,就不用每个请求都配一遍。instance.interceptors.request.use( // 请求拦截配置 // 拦截成功,返回非promise实例对象config config => { if (config.method === 'post') { config.data = qs.stringify(config.data); } return config; // 判断token是否存在,存在就添加到请求头上 // const token = store.state.loginModule.user.token; // if(token){ // config.headers.authorization = store.state.loginModule.user.token; // } }, // 拦截失败时,返回promise error => Promise.reject(error))const toLogin = () => { router.push("/login")}// errorHandle打印失败状态码对应的 描述和路由去向const errorHandle = (status, info) => { switch (status) { case 400: console.log("服务器收到客户端通过PUT或者POST请求提交的表示,表示的格式正确,但服务器不懂它什么意思"); toLogin(); break; case 401: console.log("客户端试图对一个受保护的资源进行操作,却又没有提供正确的认证证书"); toLogin(); break; case 403: console.log("客户端请求的结构正确,但是服务器不想处理它"); toLogin(); break; case 404: console.log("资源被围定义(网络请求地址错误)"); break; case 500: console.log("执行请求处理代码时遇到了异常,它们就发送此响应代码"); break; case 503: console.log("最可能的原因是资源不足:服务器突然收到太多请求,以至于无法全部处理"); break; default: console.log(info); break; }}// 3.interceptors拦截器配置response响应拦截instance.interceptors.response.use( // 成功时 response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response), // 失败时 error => { const { response } = error; if (response) { errorHandle(response.status, response.data); return Promise.reject(response); } else { console.log("请求被中断"); } })// 封装get请求export function get(url, params) { return new Promise((resolve, reject) => { instance.get(url, params).then(res => { //请求回调成功 console.log('封装这里,', params) resolve(res.data); }).catch(err => { reject(err.data); }) })}// 封装post请求export function post(url, params) { return new Promise((resolve, reject) => { instance.post(url, params).then(res => { //请求回调成功 resolve(res.data) }).catch(err => { reject(err.data) }) })}export default instance方法封装// api/index.js 文件// 入口文件// 导入自定义ajax封装库axios: myaxios import myaxios from "@/api/utils/request"// 导入自定义路径配置,模块化开发 简化url import base from "./base"// 定义前端的发送请求方法 const api = { // 注册请求 register(params) { // 调用自定义asiox(myaxios)封装的post方法 return myaxios.post(base.baseUrl + base.register, params) } }}// 定义的请求方法全部导出export default api;后端

本文采用:node.js + express+MySQL,创建web 服务器,构建后端。后端编写分为服务器模块、接口模块、连接数据库模块三部分,都是server文件夹下的 js 文件。

后端运行地址:http://127.0.0.1:3000/

创建服务器模块

因此,需要完成获取数据请求必须解决跨域问题,跨域问题可以在前端或者后端解决。本文采取后端解决,使用 CORS。同源安全策略 默认阻止“跨域”获取资源。但是 CORS 给了 web 服务器这样的权限,即服务器可以选择,允许跨域请求访问到它们的资源。

//接口服务器 server/index.js文件// 1.导入expressconst express = require("express")//跨域请求处理 后台处理const cors = require("cors")//post传参问题const bodyParser = require("body-parser")// 导入自定义路由const router = require("./router")// 2.创建web服务器const app = express()// 注册中间件app.use(cors());// app.use(express.json());app.use(bodyParser.urlencoded({ extended: false }))//路由访问前缀app.use('/api', router)// 3.启动服务器app.listen(3000, () => { console.log('express server running at http://127.0.0.1')})

其中,web服务器服务器对象 app,通过导入接口方法模块,并使用app.use('/api', router)实现接口方法应用。

接口方法模块

注册的步骤:主要是实现服务器获取请求体的数据,然后将数据插入数据库,最后给客户端响应。

// server/router.js文件// 设置路由,定义对应post,URL的处理函数const express = require("express")// 创建路由对象const router = express.Router();//导入数据库配置对象const sqlClient = require('./dbconfig')//导入JWT生成tokenconst JWT = require("jsonwebtoken")//导入JWT解密const expressJWT = require("express-jwt")// 请求post和url=localhost:3000/api/register 的注册路由const url = require("url");const { send } = require("process");router.post("/register", (req, res) => { //接收请求对象携带的数据 const { username, pass, email } = req.body; //sqlClient实现连接数据库,并将用户数据插入数据库 并回调函数响应数据 sqlClient("insert into user values(null,?,?,?)", [username, pass, email], result => { //插入成功 并响应对象数据给客户端 if (result.affectedRows > 0) { res.send({ status: 200, msg: "注册成功" }) } else { res.send({ statu: 401, msg: "注册失败" }) } })})连接数据库

只需要导入mysql库,即可以实现数据库连接,并向外导出操作数据库的方法对象,该函数返回一个操作结果。

// server/dbconfig.js文件const mysql = require("mysql")//定义连接对象const client = mysql.createConnection({ host: "localhost", user: "root", password: "root", database: "vue_mall"})//定义操作数据库的方法,参数为sql语句,数组数据,回调函数const sqlClient = (sql, arr, callback) => { client.query(sql, arr, (error, result) => { if (error) { //发生错误,返回错误信息 console.log(error) return } //成功,则调用回调函数返回操作的结果 callback(result) })}module.exports = sqlClient

使用 mysql 对象的createConnection方法创建连接数据库对象 client,然后 定义一个sqlClient对象,其中 sqlClient 需要参数sql语句,数组数据,便会调用回调函数,并返回sql语句和数据操作数据库的结果。

本文链接地址:https://www.jiuchutong.com/zhishi/297663.html 转载请保留说明!

上一篇:路径规划 | 图解A*、Dijkstra、GBFS算法的异同(附C++/Python/Matlab仿真)(路径规划是什么意思)

下一篇:Squarespace 和 WordPress 的区别

  • 抖音怎么定位自己的店铺位置(抖音怎么定位自己的账号)

    抖音怎么定位自己的店铺位置(抖音怎么定位自己的账号)

  • 12123图形验证码总是错误(交管12123 验证码)

    12123图形验证码总是错误(交管12123 验证码)

  • 腾讯会议共享视频没有声音(腾讯会议共享视频卡顿)

    腾讯会议共享视频没有声音(腾讯会议共享视频卡顿)

  • 计算机的五大部件是什么(计算机五大部分不包括)

    计算机的五大部件是什么(计算机五大部分不包括)

  • iphone数据漫游是什么意思(苹果的数据漫游是什么意思?)

    iphone数据漫游是什么意思(苹果的数据漫游是什么意思?)

  • 小度音箱怎么恢复出厂设置(小度音箱怎么恢复原厂设置)

    小度音箱怎么恢复出厂设置(小度音箱怎么恢复原厂设置)

  • 光速春运抢票卡可以退吗(2020春运抢票攻略)

    光速春运抢票卡可以退吗(2020春运抢票攻略)

  • 微信发送聊天记录怎么发送(微信发送聊天记录怎么发)

    微信发送聊天记录怎么发送(微信发送聊天记录怎么发)

  • 智慧引擎是干什么用的(智慧引擎是干什么工作的)

    智慧引擎是干什么用的(智慧引擎是干什么工作的)

  • realmex屏幕刷新率是多少(realmeq刷新率)

    realmex屏幕刷新率是多少(realmeq刷新率)

  • 网易云怎么切换登录(网易云怎么切换账号)

    网易云怎么切换登录(网易云怎么切换账号)

  • int指令是什么意思(int 指令)

    int指令是什么意思(int 指令)

  • iphonex怎么更换铃声(iphonex怎么更换有拼音的字体吗)

    iphonex怎么更换铃声(iphonex怎么更换有拼音的字体吗)

  • 苹果11用一会就发热(苹果11用一会就烫手)

    苹果11用一会就发热(苹果11用一会就烫手)

  • word波浪线怎么打出来(word波浪线怎么打)

    word波浪线怎么打出来(word波浪线怎么打)

  • 电脑没电关机有损害吗(电脑没电关机有辐射吗)

    电脑没电关机有损害吗(电脑没电关机有辐射吗)

  • 低蓝光模式需要开启吗(低蓝光模式需要开吗)

    低蓝光模式需要开启吗(低蓝光模式需要开吗)

  • match函数什么意思(match 函数)

    match函数什么意思(match 函数)

  • ipad死机打不开(ipad卡死重启开不了)

    ipad死机打不开(ipad卡死重启开不了)

  • 怎么关闭流量(怎么关闭流量加速功能)

    怎么关闭流量(怎么关闭流量加速功能)

  • 华为mate30支持nfc功能吗(华为MATE30支持多设备通信共享)

    华为mate30支持nfc功能吗(华为MATE30支持多设备通信共享)

  • 微信如何更换手机号码(微信如何更换手机号码解绑)

    微信如何更换手机号码(微信如何更换手机号码解绑)

  • 键盘上pgup是什么意思(键盘上pgup是什么)

    键盘上pgup是什么意思(键盘上pgup是什么)

  • sql优化的几种方法(sql优化的几种方法有哪些)

    sql优化的几种方法(sql优化的几种方法有哪些)

  • 抖音是一个什么软件(抖音是一个什么样的平台)

    抖音是一个什么软件(抖音是一个什么样的平台)

  • oppo k3出厂自带贴膜么(oppok3出厂系统)

    oppo k3出厂自带贴膜么(oppok3出厂系统)

  • 高德地图怎么横屏设置(高德地图ar实景导航怎么打开)

    高德地图怎么横屏设置(高德地图ar实景导航怎么打开)

  • 拼多多付款了没订单(拼多多付款了没有交易记录怎么办)

    拼多多付款了没订单(拼多多付款了没有交易记录怎么办)

  • 蔚蓝海域中的马提尼克岛,加勒比海 (© Airpano LLC/Amazing Aerial Agency)(蔚蓝的海怎么样)

    蔚蓝海域中的马提尼克岛,加勒比海 (© Airpano LLC/Amazing Aerial Agency)(蔚蓝的海怎么样)

  • 税金及附加怎么来的
  • 营改增后为什么利息要提供发票吗
  • 其他综合收益属于损益类科目吗
  • 季中转一般纳税人申报步骤
  • 委托外单位加工发出的材料分录
  • 可供出售债权投资
  • 收到保险公司返还的保险费
  • 销售包装物的会计处理
  • 哪些税不可以扣除
  • 个体户没有三证合一,年检
  • 个人购买办公楼出租要交税吗
  • 赞助失败案例
  • 开票系统维护费必须要交吗
  • 制造费用包括劳动保护费吗
  • 增资印花税税目
  • 合作社免税收入需要成本吗?
  • 厦门新车购置税计算
  • 鸿蒙系统怎么开发
  • 开了红字发票销售方应怎么账务处理?
  • php mysql pdo
  • 想要探究的问题
  • php 静态
  • 查补以前年度所得税如何申报
  • 怎么登明细分类账
  • hiddenalbum是什么文件夹
  • 木卫一距离木星多远
  • 房企因商品质量问题退租
  • php get函数
  • 豁免债权如何做账
  • 顺流交易逆流交易区别
  • 完美解决在ThinkPHP控制器中命名空间的问题
  • 资产证券化会计处理案例
  • 固定资产内部转移单
  • 水利建设税根据什么申报
  • 家居办公装修
  • 专用发票货物名称怎么填
  • 旅游门票费用可以用来报销吗?
  • 委托代销商品支付的手续费计入什么科目
  • 减免税款账务处理
  • 销售产品的运输费会计分录
  • 财务做帐的金额怎么算
  • 请问在accessdemo1
  • 数据库镜像是什么意思
  • mysql怎么替换某个值
  • 劳务费与应付职工薪酬的区别
  • 分公司能不能作为行政处罚的主体
  • 企业所得税年度纳税申报表A类怎么填
  • 公司的装修费计入什么科目
  • 房产税税率采用比例税率按照房产余值计征的年税率为
  • 资本公积资本溢价怎么算
  • 利润分配未分配利润是净利润吗
  • 进项税和销项税怎么理解
  • 员工福利费怎么写分录
  • 开票软件信息备份怎么备份
  • 计提资产减值是好事还是坏事
  • 企业低值易耗品的摊销方法有( )
  • solaris 10安装
  • xp系统如何配置ip
  • 怎么禁止p2p下载器
  • 移动u盘的作用
  • FNPLicensingService.exe是什么意思
  • win8系统无法连接到网络
  • 为什么要淘汰相关性高的指标
  • 如何用dos破解wifi
  • linux device driver
  • linux xfs 扩容
  • unity资源文件
  • uploadify上传无反应
  • unity程序基础框架
  • js知识总结
  • js性能优化方法
  • 如何查询企业股票代码
  • 北京税务机关代码查询
  • 国家税务总局令16号公告
  • 四川省网上税务局怎么登录
  • 杭州市税务局副局长
  • 个人所得税扣缴手续费退付是什么意思
  • 有发票代码和发票号码能下载到电子发票吗
  • 什么是从价计征,从量计征
  • 一般纳税人企业所得税怎么征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设