在生产模式下写入全局变量有什么问题?

2024-04-19

我看了一下连接mongodb的示例代码,看到了一句看不懂的内容。

为什么在开发的情况下使用全局变量是安全的? 又为何没有投入生产?

您不需要理解代码。请只看评论部分。

import { MongoClient } from 'mongodb'

let client
let clientPromise

if (process.env.NODE_ENV === 'development') {
  // In development mode, use a global variable so that the value
  // is preserved across module reloads caused by HMR (Hot Module Replacement).
  if (!global._mongoClientPromise) {
    client = new MongoClient(uri, options)
    global._mongoClientPromise = client.connect()
  }
  clientPromise = global._mongoClientPromise
} else {
  // In production mode, it's best to not use a global variable.
  client = new MongoClient(uri, options)
  clientPromise = client.connect()
}

// Export a module-scoped MongoClient promise. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise

如果这只是为了高质量的代码,那么最好不要在开发环境中使用全局变量。

我不确定在生产环境中写入全局变量有什么问题。


它与在开发中使用“热模块替换”以提高开发效率有关。这不是您在生产环境中会做的事情。

在热模块替换中,模块级变量如client and clientPromise当模块被“热替换”时将被替换,但全局变量将被保留。

这是一个开发“技巧”,而不是在生产中要做的事情。

就我个人而言,我什至不会在开发中这样做,因为我宁愿在开发中运行尽可能接近生产的代码,除了必须不同的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在生产模式下写入全局变量有什么问题? 的相关文章

随机推荐

  • WPF/C# - 以编程方式创建和使用单选按钮的示例

    有人可以指出如何在 C WPF 中以编程方式创建和使用单选按钮的示例吗 所以基本上如何 a 以编程方式创建它们 以及 b 如何在值更改时捕获触发器 c 如何在给定时间获取结果 我们也有兴趣看看答案是否也基于使用绑定方法 如果数据绑定是最简单
  • 如何使用 VBA 循环遍历 MS Word 中的每个字母?

    我有大约 100 个 Word 文档 其中包括外国名字的音译 这些文档的作者使用了一种特殊的字体 称为e2它有大约十几个特殊音译字符 所有这些字符都以 Microsoft Sans Serif 字体提供 我想遍历文档中的每一个字母 并且每当
  • 将逗号分隔值拆分为行

    如何将 SQL Server 中逗号分隔的字符串中的值获取到行中 以便将它们插入到表中 例如 使用以下数据 Declare string as nvarchar max Declare substring as nvarchar 50 se
  • 如何增强 Box.com API 请求限制

    正如这里所写http blog programmableweb com 2013 01 11 opening up the box api http blog programmableweb com 2013 01 11 opening u
  • 时间:2019-03-17 标签:c#dispatchqueueslikeobjectivec

    我想在 C 中模仿 Objective C 调度队列的行为 我看到有一个任务并行库 但我真的不明白如何使用它 并希望得到一些关于如何使用它的解释 在目标 c 中我会做类似的事情 void doSomeLongRunningWorkAsync
  • 无法找到类型 [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]

    我正在尝试编写一个脚本来使用 powershell 连接到 TFS 但是我陷入了实际连接的部分 credentialProvider new object Microsoft TeamFoundation Client UICredenti
  • OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量结合使用

    我正在尝试使用cvGoodFeatureToTrackVisual Studio 2010 中的函数 图像类型为Mat 我见过的大多数例子都使用IplImage指针 现在我有这个 int w h video frame size Mat g
  • 类型错误:无法腌制 dict_items 对象

    Why does pickle dumps items 失败与TypeError can t pickle dict items objects在 Python 3 5 2 中但不在 Python 2 7 12 中 用 酸洗 字典 pick
  • ITMS-90909:Xamarin Forms 应用程序中不推荐使用 iOS 的 API

    任何人都可以建议如何处理我将 Xamarin Forms 应用程序提交到 iOS 商店时收到的这条消息吗 对可能的重复进行评论 这个问题之前曾被问过 但没有得到解答 我认为不存在已答复的重复项 这是一个已知问题 最近由 Xamarin 团队
  • 建立数据库连接 Amazon EC2 时出错 - 移动我的 WordPress 博客后

    将我的 WordPress 博客移至 Amazon EC2 后 我收到错误 建立数据库连接时出错 我已经检查了 wp config php 文件并且设置正常 本地主机 密码和用户名 我已经阅读了这里的许多问题和答案 但没有任何帮助我 我有
  • 在 Web API 中使用 ExceptionFilterAttribute

    我正在尝试在创建的 Web API 中实现错误处理 需要以 JSON 格式返回异常详细信息 我创建了 BALExceptionFilterAttribute 像 public class BALExceptionFilterAttribut
  • 我们可以在 PHP 的任何函数中传递数组作为参数吗?

    我有一个向用户发送邮件的函数 我想将其参数之一作为 id 数组传递 这可以吗 如果是的话 该怎么办 假设我们有一个函数 function sendemail id userid 在示例中 id应该是一个数组 您可以传递一个数组作为参数 它是
  • 类型参数 T 使用 Eclipse 将类型 T 隐藏在 T[] toArray(T[] a) 中

    将 eclipse 4 2 与 Java 7 一起使用并尝试实现 List 接口的以下方法时 我收到了警告 public
  • 访问 sails.js 的基础 http 服务器

    您好 有没有办法访问 sails 的基本 http 服务器上下文 我想在我的应用程序中使用binaryJS 并且在 gettig 入门指南中 他们正在谈论自己创建服务器 如果您有一个现有的 Express 应用程序 其中包含以下行 var
  • 如何加快这段 Java 代码的速度?

    我正在尝试测试 Java 执行一项简单任务的速度有多快 将一个大文件读入内存 然后对数据执行一些无意义的计算 所有类型的优化都很重要 无论是以不同的方式重写代码还是使用不同的 JVM 欺骗 JIT 输入文件是一个由逗号分隔的 5 亿长的 3
  • 为什么 $count=true 的 OData 查询返回一个对象?

    我试图弄清楚如何正确支持返回 OData API 中 已过滤的 数据集中的项目数 我的理解是添加 count true查询字符串的参数应该允许这样做 现在 基于官方文档中教程的示例 https www odata org getting s
  • SQL 2008 存储过程中的可选 where 子句/参数?

    我正在编写一些更新表的代码 根据用户想要执行的操作 它会更新一大组记录或较小的记录 描述因素是组ID 用户可以选择是更新表中的所有记录 还是仅更新具有该 groupID 的记录 我想对两个实例使用相同的存储过程 其中可能有一些逻辑来区分场景
  • JQuery html() 与 innerHTML

    我可以完全依赖 jQuery 吗html 方法的行为与innerHTML 有什么区别吗innerHTML和 jQuery 的html 方法 如果这些方法都做同样的事情 我可以使用 jQuery 的吗 html 方法代替innerHTML 我
  • 获取 Firefox 中扩展的附加 ID

    我想在浏览器选项卡中打开扩展作为普通的 html 页面 以便我可以使用 selenium WebDriver 自动化它 在 Firefox 中 可以使用这样的链接来完成 moz extension f1b30486 cd88 4319 bb
  • 在生产模式下写入全局变量有什么问题?

    我看了一下连接mongodb的示例代码 看到了一句看不懂的内容 为什么在开发的情况下使用全局变量是安全的 又为何没有投入生产 您不需要理解代码 请只看评论部分 import MongoClient from mongodb let clie