当前位置: 代码网 > it编程>编程语言>Javascript > NestJS装饰器实现GET请求

NestJS装饰器实现GET请求

2024年11月26日 Javascript 我要评论
装饰器实现get请求定义一个装饰器get,用于在controller 类中装饰getlist 方法,以便从指定的url发起一个get请求。然后根据请求的结果调用getlist 方法,并将响应数据或错误

装饰器实现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类

包含一个构造函数和一个被装饰的方法 getlistgetlist 方法在接收到数据后可以进行相应的处理,例如输出数据到控制台。

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请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com