NestJS装饰器实现GET请求

 更新时间:2024年10月27日 11:47:27   作者:不叫猫先生  
本文介绍了如何通过装饰器实现GET请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

装饰器实现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请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • TypeScript中条件类型精读与实践记录

    TypeScript中条件类型精读与实践记录

    这篇文章主要给大家介绍了关于TypeScript中条件类型精读与实践的相关资料,,条件类型就是在初始状态并不直接确定具体类型,而是通过一定的类型运算得到最终的变量类型,需要的朋友可以参考下
    2021-10-10
  • JavaScript中的常见继承总结

    JavaScript中的常见继承总结

    这篇文章主要介绍了JavaScript中的常见继承总结,继承其实就是构造函数和构造函数之间的一种关系,更多相关介绍,需要的小伙伴可以参考下面文章内容
    2022-09-09
  • express+mockjs实现模拟后台数据发送功能

    express+mockjs实现模拟后台数据发送功能

    这篇文章主要介绍了express+mockjs实现模拟后台数据发送功能,需要的朋友可以参考下
    2018-01-01
  • 原生JS实现日历组件的示例代码

    原生JS实现日历组件的示例代码

    本篇文章主要介绍了原生JS实现日历组件的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 基于Javascript实现弹出页面效果

    基于Javascript实现弹出页面效果

    弹出层效果是一个很实用的功能,很多网站都采用了这种方式实现登录和注册,下面小编通过本文给大家分享具体实现代码,对js弹出页面效果相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • 如何理解JavaScript模块化

    如何理解JavaScript模块化

    模块化简单来说就是将一个完整的长篇代码文件根据功能进行划分成几个文件,这些文件各自负责一个独立的功能,各个文件组合起来实现一个完整的大功能,这就是模块化,每个负责独立功能的文件就是模块。
    2021-05-05
  • 尝试动手制作javascript放大镜效果

    尝试动手制作javascript放大镜效果

    这篇文章主要介绍了javascript放大镜效果,照着别人的例子,自己试着做了个放大镜效果,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 微信小程序实现登录遮罩效果

    微信小程序实现登录遮罩效果

    这篇文章主要为大家详细介绍了微信小程序实现登录遮罩效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 基于element-ui组件手动实现单选和上传功能

    基于element-ui组件手动实现单选和上传功能

    在用户使用过程中提出一键导入的功能,需求如下:点击导入按钮显示提示框,然后是单选框以及上传按钮。这篇文章主要介绍了基于element-ui组件手动实现单选和上传功能,需要的朋友可以参考下
    2018-12-12
  • JS实现超简单的鼠标拖动效果

    JS实现超简单的鼠标拖动效果

    这篇文章主要介绍了JS实现超简单的鼠标拖动效果,涉及JavaScript响应鼠标事件动态操作页面元素的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11

最新评论