小程序封装wx.request
时间: 2023-07-23 11:11:15 浏览: 141
可以使用以下代码来封装微信小程序的网络请求(wx.request):
```javascript
function request(url, method, data) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
method: method,
data: data,
success: res => {
resolve(res.data);
},
fail: err => {
reject(err);
}
});
});
}
```
你可以在小程序中调用这个封装的函数来发送网络请求。例如:
```javascript
request('https://api.example.com/data', 'GET', { key: 'value' })
.then(data => {
console.log(data);
// 处理返回的数据
})
.catch(err => {
console.error(err);
// 处理错误
});
```
这样封装之后,你可以更方便地使用 Promise 来处理异步操作,并且可以统一处理请求成功和失败的情况。
相关问题
微信小程序 封装 wx.request
### 微信小程序封装 `wx.request` 示例及最佳实践
#### 1. 创建请求工具模块
为了更好地管理和维护代码,在项目的 utils 文件夹下创建一个新的 JavaScript 文件 request.js。
```javascript
// utils/request.js
const baseUrl = 'https://api.example.com'; // 替换成实际的基础URL
function request(url, method = 'GET', data = {}, header = {}) {
return new Promise((resolve, reject) => {
wx.request({
url: `${baseUrl}${url}`,
method,
data,
header: {
...header,
'content-type': 'application/json' // 默认值
},
success(res) {
resolve(res.data);
},
fail(err) {
reject(err);
}
});
});
}
```
此函数接受四个参数:API路径、HTTP方法类型、发送的数据对象以及自定义头部信息。它返回一个Promise实例,使得异步操作更加直观易读[^3]。
#### 2. 添加通用错误处理机制
当遇到网络异常或其他不可预见的情况时,应该有统一的方式去捕获并展示给用户友好的提示消息:
```javascript
// 继续编辑 utils/request.js
async function safeRequest(...args) {
try {
let res = await request(...args);
if (res.statusCode >= 400) throw new Error('Server error');
return res;
} catch (error) {
console.error(error.message || "Network Error");
wx.showToast({ title: '加载失败,请稍后再试...', icon: 'none'});
throw error; // 或者可以选择不抛出而是在这里结束流程
}
}
module.exports = { request, safeRequest };
```
这段代码增加了对服务器响应状态码的判断,并且利用了 async/await 结构来简化异步编程模型下的错误捕捉过程[^4]。
#### 3. 实现拦截器模式增强灵活性
对于某些特定场景可能需要在每次发起请求前做一些预处理工作(比如添加token验证),可以在原有基础上进一步扩展功能:
```javascript
// 修改后的 utils/request.js 版本
let interceptors = [];
function addInterceptor(interceptorFn){
interceptors.push(interceptorFn);
}
function enhancedRequest(config={}) {
const configWithDefaults = Object.assign({}, config);
// 执行所有已注册的拦截器
interceptors.forEach(fn=>fn(configWithDefaults));
return safeRequest(
configWithDefaults.url,
configWithDefaults.method,
configWithDefaults.data,
configWithDefaults.header
);
}
module.exports = {addInterceptor,enhancedRequest};
```
通过这种方式可以轻松地向每一次请求注入额外的行为逻辑而不必修改核心库本身[^1]。
微信小程序封装wx.request
### 微信小程序封装 `wx.request` 示例及最佳实践
#### 1. 使用 Promise 解决回调地狱问题
为了提高代码的可读性和维护性,可以使用 JavaScript 的 `Promise` 来处理异步操作。通过这种方式,能够有效避免多层嵌套的成功回调函数带来的复杂度。
```javascript
// utils/request.js
function request(url, method = 'GET', data = {}) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
method: method,
data: data,
header: {
'content-type': 'application/json'
},
success(res) {
resolve(res.data);
},
fail(err) {
reject(err);
}
});
});
}
```
此实现利用了 `Promise` 对象来替代传统的成功失败回调模式[^1]。
#### 2. 统一配置基础 URL 和头部信息
对于大多数应用程序而言,API 请求通常会共享相同的域名前缀以及某些固定的 HTTP 头部字段。因此,在创建请求实例时设置这些默认选项是非常有帮助的做法。
```javascript
const BASE_URL = 'https://api.example.com'; // 替换成实际的基础URL
const DEFAULT_HEADERS = {'Authorization': 'Bearer token'};
function request(url, method = 'GET', data = {}) {
const fullUrl = `${BASE_URL}${url}`;
return new Promise((resolve, reject) => {
wx.request({
url: fullUrl,
method: method,
data: data,
header: {...DEFAULT_HEADERS},
success(res) {
resolve(res.data);
},
fail(err) {
reject(err);
}
});
});
}
```
上述代码片段展示了如何定义全局变量存储基本路径和通用头信息,并将其应用于每一次发出的请求中[^3]。
#### 3. 添加错误处理机制
良好的异常捕获策略有助于提升用户体验并减少潜在的安全风险。可以在封装后的 `request()` 函数内部加入简单的状态码判断逻辑,以便更优雅地应对各种可能发生的状况。
```javascript
async function safeRequest(url, method = 'GET', data = {}) {
try {
let response = await request(url, method, data);
if (!response.success || response.statusCode >= 400) {
throw Error('Server responded with an error');
}
return response;
} catch(error){
console.error(`Error occurred during the request to ${url}:`, error.message);
// 可选:向用户展示友好的提示消息或重试按钮
throw error;
}
}
```
这段增强版的方法不仅实现了基于承诺的结果返回,还加入了对服务器响应的有效验证过程[^4]。
阅读全文
相关推荐














