装饰器实现get请求
定义一个装饰器 get,用于在 controller 类中装饰 getlist 方法,以便从指定的 url 发起一个 get 请求。然后根据请求的结果调用 getlist 方法,并将响应数据或错误信息传递给它。
get装饰器
其中get接收一个 url 字符串作为参数,返回一个装饰器函数,该函数接收 target(类的原型对象)、key(方法名)、和 descriptor(方法的描述符)。
使用 axios 发起 get 请求,如果请求成功,则调用 fnc(即 getlist)并传入响应数据和一个状态对象;如果请求失败,则也调用 fnc,并传入错误信息和状态对象。
import axios from "axios";
const get = (url: string) => {
return (target: object, key: any, descriptor: propertydescriptor) => {
console.log(key,descriptor)
const fnc = descriptor.value;//将原方法 fnc 存储在变量中。
axios.get(url).then(res => {
fnc(res, {
status: 200,
success: true
})
}).catch(e => {
fnc(e, {
status: 500,
success: false
})
})
}
}
controller类
包含一个构造函数和一个被装饰的方法 getlist。getlist 方法在接收到数据后可以进行相应的处理,例如输出数据到控制台。
class controller {
constructor() { }
@get("https://maqib.cn/_next/data/nlssypirjyj1wlxgylj6n/blog.json")
getlist(res: any, status: string) {
// console.log(res.data)
}
}
优化上面代码
import axios from "axios";
const get = (url: string) => {
return (target: object, key: string | symbol, descriptor: propertydescriptor) => {
const originalmethod = descriptor.value;
descriptor.value = async function (...args: any[]) {
try {
const res = await axios.get(url);
// 调用原始方法并传递结果和状态
return originalmethod.apply(this, [res, { status: 200, success: true }, ...args]);
} catch (e) {
// 处理错误情况
return originalmethod.apply(this, [e, { status: 500, success: false }, ...args]);
}
};
};
}
class controller {
constructor() {}
@get("https://maqib.cn/_next/data/nlssypirjyj1wlxgylj6n/blog.json")
async getlist(res?:any, status?: { status: number; success: boolean }) {
if (status?.success) {
console.log(res.data); // 正常响应
} else {
console.error('error:', res); // 错误处理
}
}
}
// 测试控制器
const controller = new controller();
controller.getlist(); // 调用 getlist 方法到此这篇关于nestjs装饰器实现get请求的文章就介绍到这了,更多相关nestjs get请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论