axios的Get和Post方法封装及Node后端接收数据
最近有做一个Vue的小项目,其中用到了尤大大推荐使用的axios,但是使用的过程中遇到了各种各样的问题,所以这次也是将一些心得分享出来。
安装的流程我就简单说一下下吧,在一个自己新建的文件夹中命令行中,输入以下命令,当然这边是默认大家已经安装了node.js
npm install vue --save 对Vue的安装
vue init webpack studentchoose 初始化项目,生成webpack文件,基本就默认下来就可以了
cd studentchoose 进入此项目
npm install 下载依赖
npm install axios --save 下载axios并配置到package.json
npm start 开启服务
然后按照控制台的提示就可以看到一开始的界面了,一般默认的端口是8080
我新建了一个文件夹专门用来存放自己封装的函数,在这里新建一个文件myRequest.js
myRequest.js
import axios from "axios";
import qs from "qs";
export function axiosGet(url, data, callback) {
console.log("get");
axios
.get("/api" + url, {
params: qs.stringify(data)
})
.then(function (res) {
callback(res, true);
})
.catch(function (error) {
callback(err, false);
});
}
export function axiosPost(url, data, callback) {
axios
.post(
"/api" + url,
qs.stringify(data)
)
.then(function (res) {
callback(res, true);
})
.catch(function (error) {
callback(err, false);
});
}
export default axiosGet
导入当然是必要的,qs.stringify()的作用是用来将数据绑到请求的url上
var a = {courseName:'jobs',age:21};
console.log(qs.stringify(a))//输出courseName=jobs&age=21
有的同学可能已经注意到了,我的请求的url前,还有一个"/api",这又是什么呢?这是因为axios是本身不支持跨域的,但我们日常的项目,大部分是要前后端解耦合的,所以跨域是需要考虑的部分
解决方法
进入config文件夹下的index.js,重写dev里面的proxyTable部分,改为(初始的时候是空的)
proxyTable: {
'/api': {
target: 'http://localhost:5000',//设置你调用的接口和端口号
changeOrigin: true,
pathRewrite: {
'^/api': ''//用”/api“来代替target里面的地址
}
}
},
然后在你调用的接口前加上“/api”就可以跨域了。
服务器端
server.js
var express = require("express");
var app = express();
const listenNumber = 5000;
var course = require('../router/course')
app.post("/course", (req, res) => {
course.CoursePost(req,res);
}) app.get("/course", (req, res) => {
course.CourseGet(req,res);
}) app.listen(listenNumber)
然后下面是我的router文件(说是函数封装也OK诶)
var formidable = require("formidable");
var url = require('url');
var CoursePost = function (req, res) {
var form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
console.log(fields)
res.json(fields);
});
}
var CourseGet = function (req, res) {
let params = url.parse(req.url, true).query[0];
let Arr = params.split("&");
let resultObj = {};
for(item of Arr){
let key = item.split("=")[0];
let value = decodeURI(item.split("=")[1]);
resultObj[key] = value;
}
res.json(resultObj);
}
module.exports.CoursePost = CoursePost;
module.exports.CourseGet = CourseGet;
这里POST的话我使用的是formidable进行表单的处理,而Get请求有些奇怪,大家可以试着传中文字符串过去,其实是会被转码的
就像 %e4%b9%94%e5%b8%83%e6%96%af 这样
一开始我以为是BUG,后来才知道是为了字符串中的特殊字符不会引起歧义,所以这里我们将每一个value都要进行进行decodeURL()进行转码。
最后插一句,formidable也是要 npm install formidable进行安装的,node服务这边我讲得比较散,大家有什么建议都可以和我提,加油
axios的Get和Post方法封装及Node后端接收数据的更多相关文章
- 在 Vue 结合 Axios 使用过程 中 post 方法,后台无法接受到数据问题
关于在 vue 中 使用 axios 相关 bug 首先,我们来看下 axios 的 github 传送门 axios 然后我们再介绍下 axios 的作者的 github 传送门 Matt 最后,我 ...
- python网络编程调用recv函数完整接收数据的三种方法
最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...
- axios方法封装
axios方法封装 一般情况下,我们会用到的方法有:GET,POST,PUT,PATCH,封装方法如下: 五.封装后的方法的使用 1.在main.js文件里引用之前写好的文件,我的命名为htt ...
- axios浏览器异步请求方法封装 XMLHttpRequest
axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...
- axios get及post方法代码示例&&方法封装
axios get及post方法代码示例 get方法: show: function(){ //get方式 //赋值给变量self var self = this; var url = "h ...
- 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...
- C#常用字符串加解密方法封装
C#中常用的字符串加密.解密方法封装,包含只加密但不解密的方法.收藏起来备用. //方法一 //须添加对System.Web的引用 //using System.Web.Security; /// & ...
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
- C#方法封装与重构
C#作为一个完全面向对象的语言,有个特性很重要但是往往会不重视,而不重视的结果就会造成代码杂乱难以解读.维护.这个特性就是封装. 这里不是大谈C#的封装,我只讲一个,关于方法封装的一些问题. ...
随机推荐
- window、location、location.href、self、top简单介绍
1.self:当前窗口对象(如果是在iframe里,则为该框架的窗口对象) 2.top:父窗口对象 3.window:典型情况下,浏览器会为每一个打开的html创建对应的window对象,如果这个文档 ...
- springBoot拦截器的使用
拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可 ...
- c++之&
转自www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html 一直以为&是取地址,也看到引用,但是今天才发现引用跟取址完全不是一个意思,&am ...
- mysql学习笔记--列属性
一.是否为空----null || not null 二.默认值----default 三.自动增长----auto_increment 四.主键----primary key 1. 主键:唯一标识表 ...
- java基础 ---- 练习for循环
----- 使用for循环打印图形 //打印矩形 public class Print { public static void main(String[] args) { for(int i=1 ...
- 735. Asteroid Collision彗星相撞后的消失数组
[抄题]: We are given an array asteroids of integers representing asteroids in a row. For each asteroid ...
- 用TSQL从sqlserve 发布订阅链中删除一张或几张表
一个简单的存储过程,用来实现从一个SQLSERVE 发布订阅链中删除一张或几张表. /* 1.停日志读取代理 2.exec usp_从复制订阅中删除表 'dbtestPub','test1' 3.开日 ...
- 2.在demo bag上运行cartographer ROS
注意在运行bag包,之前需要去执行source install_isolated/setup.bash 1.Deutsches Museum 下载并启动2D的backpack demo: wget - ...
- 《C#从现象到本质》读书笔记(三)第3章C#类型基础(下)
<C#从现象到本质>读书笔记第3章C#类型基础(下) 常量以关键字const修饰.C#支持静态字段(类型字段)和实例字段. 无参属性的get方法不支持参数,而有参属性的get方法支持传入一 ...
- #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)
https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...