需要使用网络请求的场景很多,想要一个HTTP请求的工具类和Demo
该Demo 能包含网络请求的工具类,Post 、Get 等方法的封装,回调的处理,以及文件上传等。
希望能解决单个页面请求多个接口的问题,原生代码实现的话,代码会太多。
需要使用网络请求的场景很多,想要一个HTTP请求的工具类和Demo
该Demo 能包含网络请求的工具类,Post 、Get 等方法的封装,回调的处理,以及文件上传等。
希望能解决单个页面请求多个接口的问题,原生代码实现的话,代码会太多。
在网络请求封装方面,确实存在一些最佳实践,可以帮助你构建高效、可维护且易于使用的HTTP请求工具类。下面是一个基于这些实践的建议框架,以及一个简化的示例代码,用于展示如何封装GET和POST请求,包括回调处理和文件上传功能。这个示例将使用原生JavaScript(假设是在Node.js环境下,如果你是在浏览器环境中,可能需要使用fetch
API或XMLHttpRequest
)。
fetch
的AbortController
),实现请求取消功能。以下是一个简化的Node.js环境下的HTTP请求工具类示例,使用axios
库(一个基于Promise的HTTP客户端,易于使用且功能强大)来实现。如果你需要原生实现,请注意这个示例是基于库的。
安装axios
npm install axios
HTTP请求工具类 (HttpClient.js
)
const axios = require('axios');
class HttpClient {
static async get(url, config = {}) {
try {
const response = await axios.get(url, config);
return response.data;
} catch (error) {
console.error('GET request failed:', error);
throw error; // 可以选择抛出错误或进行其他错误处理
}
}
static async post(url, data, config = {}) {
try {
const response = await axios.post(url, data, config);
return response.data;
} catch (error) {
console.error('POST request failed:', error);
throw error; // 同上
}
}
// 可以继续添加PUT, DELETE等方法
// 文件上传示例(使用FormData)
static async uploadFile(url, formData) {
try {
const response = await axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data',
...formData.getHeaders() // 如果有getHeaders方法,用于获取额外的headers
}
});
return response.data;
} catch (error) {
console.error('File upload failed:', error);
throw error;
}
}
}
module.exports = HttpClient;
使用示例
const HttpClient = require('./HttpClient');
// 使用GET方法
HttpClient.get('https://api.example.com/data')
.then(data => console.log(data))
.catch(error => console.error(error));
// 使用POST方法
HttpClient.post('https://api.example.com/submit', { key: 'value' })
.then(response => console.log(response))
.catch(error => console.error(error));
// 文件上传(假设formData已经构建好)
const formData = new FormData();
formData.append('file', file); // file是File对象或Blob对象
HttpClient.uploadFile('https://api.example.com/upload', formData)
.then(response => console.log(response))
.catch(error => console.error(error));
注意:如果你需要原生JavaScript实现,你需要使用fetch
API(浏览器环境)或Node.js的http
或https
模块(配合流来处理文件上传等复杂场景)。
1 回答534 阅读✓ 已解决
1 回答539 阅读
1 回答482 阅读
468 阅读
411 阅读
1 回答376 阅读
分享一个简单的代码案例:
1.创建一个工具类目录utils,在子目录下创建文件HttpUtil:
2.在需要的地方可以这样引用:import { httpRequestGet } from '../common/utils/HttpUtil';
也可以参考使用官方的api,自己实现业务逻辑,文档参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-refere...
或者使用三方库,比如axios来实现,文档参考:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Faxios