热门标签 | 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 )


   



推荐阅读
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 作为一名 Ember.js 新手,了解如何在路由和模型中正确加载 JSON 数据是至关重要的。本文将探讨两者之间的差异,并提供实用的建议。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文探讨了在 Vue 2.0 项目中使用 Axios 获取数据时可能出现的错误,并提供详细的解决方案和最佳实践。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
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社区 版权所有