axios发送post和get请求,并实现上传下载

一、简单几行代码解决post和get请求,话不多说,整代码

const axios = require("axios");
const FS = require("fs");
const FilePath = require("path");
const FormData = require("form-data");
const UUID = require('uuid');

let nums = 1;

// 普通get请求
async function getRequest(url, headers, params) {
    console.log(nums++ + ".get请求,url: " + url);
    console.log("参数: " + JSON.stringify(params));
    let start = new Date().getTime();
    let response = await axios.get(url, {
        params: params,
        headers: headers
    });
    let end = new Date().getTime();
    console.log("耗时:" + (end - start) + "ms")
    return response.data;
}

// 普通post请求
async function postRequest(url, headers, params) {
    console.log(nums++ + ".post请求,url: " + url);
    console.log("参数: " + JSON.stringify(params));
    let start = new Date().getTime();
    let response = await axios.post(url, params, {
        headers: headers
    });
    let end = new Date().getTime();
    console.log("耗时:" + (end - start) + "ms")
    return response.data;
}

// post表单请求
async function postForm(url, headers, params) {
    console.log(nums++ + ".postForm请求,url: " + url);
    console.log("参数: " + JSON.stringify(params));
    let formData = new FormData();
    let keys = Object.keys(params);
    for (let i = 0; i < keys.length; i++) {
        formData.append(keys[i], params[keys[i]]);
    }
    let start = new Date().getTime();
    let response = await axios.post(url, formData, {
        headers: formData.getHeaders()
    });
    let end = new Date().getTime();
    console.log("耗时:" + (end - start) + "ms")
    return response.data;
}

// get下载请求
async function download(url, headers, params, fileFullName) {
    console.log(nums++ + ".get下载请求,url: " + url);
    console.log("参数: " + JSON.stringify(params));
    const path = FilePath.resolve(fileFullName);
    const writer = FS.createWriteStream(path);
    let start = new Date().getTime();
    const response = await axios.get(url, {
        params: params,
        headers: headers,
        responseType: "stream"
    });
    await response.data.pipe(writer);
    let end = new Date().getTime();
    console.log("耗时:" + (end - start) + "ms")
}

// post上传请求,文件key需为file名,value可为数组或字符串
async function upload(url, headers, params) {
    console.log(nums++ + ".post上传请求,url: " + url);
    console.log("参数: " + JSON.stringify(params));
    let formData = new FormData();
    let keys = Object.keys(params);
    for (let i = 0; i < keys.length; i++) {
        let key = keys[i];
        let value = params[key];
        if ("file" === key) {
            if (isArray(value)) {
                for (let i = 0; i < value.length; i++) {
                    formData.append(key, FS.createReadStream(value[i]));
                }
            } else {
                formData.append(key, FS.createReadStream(value));
            }
        } else {
            formData.append(key, value);
        }
    }
    let formDataHeaders = formData.getHeaders();
    headers["Content-Type"] = formDataHeaders["content-type"];
    let start = new Date().getTime();
    let response = await axios.post(url, formData, {
        headers: headers,
        maxBodyLength: Infinity
    });
    let end = new Date().getTime();
    console.log("耗时:" + (end - start) + "ms");
    return response.data;
}

// 判断是否为数组
function isArray(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
}

例子:

// 普通get请求
let url11 = domain + "/Halloween/student/findById";
let params11 = {
    "id": 1
};
let result11 = await utils.getRequest(url11, headers, params11);
console.log(JSON.stringify(result11));

// 普通post请求
let url12 = domain + "/Halloween/student/post";
let params12 = {
    "name": "name111"
};
let result12 = await utils.postRequest(url12, headers, params12);
console.log(JSON.stringify(result12));

// postForm请求参数同普通post请求

// 下载
let url13 = domain + "/Halloween/file/download";
let params13 = {};
await utils.download(url13, headers, params13, "/Desktop/docker.txt");

// 上传单文件
let url14 = domain + "/Halloween/file/upload";
let params14 = {
    "file": "/Desktop/docker.txt"
};
let result14 = await utils.upload(url14, headers, params14);
console.log(JSON.stringify(result14));

// 上传多文件
let url15 = domain + "/Halloween/file/uploads";
let params15 = {
    "files": ["/Desktop/docker.txt", "/Desktop/docker1.txt"]
};
let result15 = await utils.upload(url15, headers, params15);
console.log(JSON.stringify(result15));

返回值:

1.get请求,url: http://127.0.0.1:8888/Halloween/student/findById
参数: {"id":1}
耗时:42ms
{"status":1,"errorCode":0,"errorMessage":null,"body":{"id":1}}
2.post请求,url: http://127.0.0.1:8888/Halloween/student/post
参数: {"name":"name111"}
耗时:5ms
{"status":1,"errorCode":0,"errorMessage":null,"body":null}
3.get下载请求,url: http://127.0.0.1:8888/Halloween/file/download
参数: {}
耗时:3ms
4.post上传请求,url: http://127.0.0.1:8888/Halloween/file/upload
参数: {"file":"/Desktop/docker.txt"}
耗时:8ms
{"status":1,"errorCode":0,"errorMessage":null,"body":"上传成功"}
5.post上传请求,url: http://127.0.0.1:8888/Halloween/file/uploads
参数: {"files":["/Desktop/docker.txt","/Desktop/docker1.txt"]}
耗时:7ms
{"status":1,"errorCode":0,"errorMessage":null,"body":"上传成功"}

看起来一样啊,两个函数不一样,get请求就是把headers和params放在一起了。这样就可以放弃postman了,一次能够请求多个接口,比如这个接口需要上面接口的返回值,直接赋值就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值