热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Node.js中高效管理和优化通用实例对象(如Redis)的使用?

一、模块导入的方式:123456789// redis.tsexport const redis = new ioRedis(options);// service.tsimport { redis


一、模块导入的方式:



1
2
3
4
5
6
7
8
9
// redis.ts



export const redis = new ioRedis(options);



// service.ts



import { redis } from './redis'



const func1 = async () => { await redis.get('demo') };



二、egg.js app 全局属性:

1
2
3
4
5
6
module.exports.login = function* (ctx) {

    const {app} = this

    const form = ctx.request.body

    let time = 3600 * 24 * 30 //token 过期时间

    let token = generateToken({_id: form._id}, time)// 生成 token

    app.redis.set(form.username, token) // 把 token 存入 redis



三、Nest.js 依赖注入



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// redis.ts



export const redisProviders = {

    provide: 'redis',

    useFactory: async () => {

    redis = new ioRedis(options);

    return redis;

    },

};



@Module({

  providers: [redisProviders],

  exports: [redisProviders],

})

export class RedisModule {}



// service.ts



@Injectable()

export class Service {

  constructor(

    @Inject('redis')

    private readonly redis

  ) {}



  async func1() {

    await this.redis.get('demo')

  }

}



个人倾向于第三种,但是在实际的开发中用的是第一种。按另一个例子 logger 实例来说,logger 有 info / error 等方法来记录日志,在全局启动的时候,也需要 logger 实例,这种情况依赖注入的方式反而成为一种限制。

Node.js 后端开发经验有限,请大家指正。

第 1 条附言  ·  19 天前

自己已经解决,还是用的依赖注入。在启动时在 ioc 上下文中获取提供者

## 以下是我自己认为的最佳实践
##---------------------------------------------------------
https://github.com/sophons-space/nest-server
https://github.com/sophons-space/nest-gateway
https://github.com/sophons-space/nest-user-center

## end
##---------------------------------------------------------

现在使用的开发框架是 ts + nest.js ,分成了 lib / modules 两层

lib 用来定义一些公共组件,如 redis 、database 、logger 等。
modules 用来实现业务,其中 controller 、service 、dao 使用的是依赖注入。

如果 modules 层中需要 公共组件,则通过模块引入的方式调用具体方法(如 logger.info )


   



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 在现代前端开发中,组件化已成为不可或缺的技术,尤其在 React 和 Vue 生态中。然而,组件的管理和测试一直是开发者面临的挑战。本文将介绍如何使用 Storybook 来简化这一过程,提高开发效率。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • 本文介绍了如何在Android应用中通过Intent调用其他应用的Activity,并提供了详细的代码示例和注意事项。 ... [详细]
  • GreenPlum采纳ShareNothing的架构,良好的施展了便宜PC的作用。自此IO不在是DW(datawarehouse)的瓶颈,相同网络的压力会大很多。然而GreenPlum的查问优化策略可能防止尽量少的网络替换。对于首次接触GreenPlum的人来说,必定耳目一新。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 在项目需要国际化处理时,即支持多种语言切换的功能,通常有两种方案:单个包和多个包。本文将重点讨论单个包的实现方法。 ... [详细]
author-avatar
真理难辩_175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有