在 Node.js 中共享对象并避免全局变量

2024-01-20

在下面的代码片段中共享数据库连接的最合适的方式是什么(db变量)与我的路由器/控制器,无需转动db变量变成全局变量?

var mongo = require('mongoskin'),
db = mongo.db(config.db.adress);

app.use(function(req, res, next) {
    db.open(function(err, data) {
        (err) ? res.send('Internal server error', 500) : next();
    });
});

// Setting up controllers here
app.post('/users', require('./controllers/users').create);

来自 PHP 背景的我开始思考依赖注入,但我不知道这是否适合节点。


尝试这样看:

app.js:

var mongo = require('mongoskin'),
db = mongo.db(config.db.adress);

app.use(function(req, res, next) {
    db.open(function(err, data) {
        (err) ? res.send('Internal server error', 500) : next();
    });
});

require('./controllers/users')(app, db);

控制器/user.js:

module.exports = function (app, db) {

    app.post('/users', function(req, res, next) {
        // Your create function
        // Link to db exists here
    });

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

在 Node.js 中共享对象并避免全局变量 的相关文章

  • 如何在ASP.NET Webform中使用Jquery表单插件?

    我遇到了这个插件 http malsup com jquery form getting started http malsup com jquery form getting started 我想知道如何在 ASP NET WebForm
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • 是否可以使用 javascript 测试用户的浏览器/操作系统是否支持给定类型的链接?

    是否可以使用 javascript 或其他任何东西 测试用户的操作系统 浏览器是否支持给定的 url 方案 例如 大多数仅使用网络邮件的用户计算机上未设置 mailto 是否有可能以某种方式捕获单击 mailto 链接的尝试并弹出比浏览器错
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 如何在没有 vscode 的情况下运行现有的语言服务器

    我正在尝试开发自己的具有语言服务器协议支持的 IDE 因此我下载了用 typescript 编写的语言服务器并尝试使用 Node js 启动它们 首先 我用webpack打包了服务器包 然后使用命令 node server js 启动 se
  • 如何在 GCC 命令行上定义字符串文字?

    在 GCC 命令行上 我想定义一个字符串 例如 Dname Mary https gcc gnu org onlinedocs gcc Preprocessor Options html index D 1 然后在源代码中 我想要print
  • 链接下载图像而不是查看图像

    我需要向网站访问者提供下载原始高分辨率图像的链接 如果我只是使用 href image jpg 链接到图像 浏览器就会显示该图像 如何让浏览器下载它 我正在使用亚马逊 S3 来服务器这些图像 如果这需要在图像上设置特殊的标头 我确信这是可能
  • 带有 C++ DLL 的 Excel-VBA 有时会崩溃

    我制作了非常简单的 c dll 只有一个函数 int DLL EXPORT stdcall foo double source return 0 我正在尝试这样使用它 Option Explicit Private Declare PtrS
  • 在 iOS 上从内存数据流播放音频

    我正在将音频库移植到 iOS 允许播放回调提供的音频流 用户提供返回原始 PCM 数据的回调 我需要播放该数据 此外 该库必须能够同时播放多个流 我想我需要使用 AVFoundation 但似乎 AVAudioPlayer 不支持流式音频缓
  • 使用 hibernate 事件侦听器更新其他实体中的非规范化值

    我们有一个基于休眠的应用程序 该应用程序已经使用拦截器来触发审计跟踪的创建 它通过挂钩 beforeTransactionComplete 机制来实现此目的 将每个实体的最终状态复制到审核表中 所有实体都有一个版本号 当发生更改时该版本号会
  • Android:File() 的资产文件夹路径?

    我的项目的资产文件夹中有一些文件 我想列出它们 所以我将其放入我的代码中 File dir new File com packagename assets fonts File fileList dir listFiles 我应该采取哪条路
  • Selenium WebDriver 默认使用什么配置文件?

    Selenium WebDriver 又名 Selenium 2 从哪里获取打开 FirefoxDriver 时使用的匿名配置文件 如果它使用 Firefox 的默认值 appdata roaming mozilla firefox pro
  • 如何在 linq to xml 中交换两个 XML 元素

    我想交换两个 xml 元素 我该怎么做呢 这是代码 我尝试了解决方案here https stackoverflow com questions 3695806 linq to xml what is the most effective
  • 在Django中引用View/Template中的多个Model

    我正在使用 Python Django 迈出第一步 并在一个 Django 项目中编写了一个包含多个 Django 应用程序的示例应用程序 现在我添加了另一个名为 仪表板 的应用程序 我想在其中显示来自不同应用程序的数据 目前我仍然使用这个
  • 如何在Windows中使用pygame打开相机?

    我想在 Windows 7 机器上使用 pygame 模块用 Python 打开相机 但它不起作用 我以前用过 dev video0 这是Linux中的读取设备 pygame 文档仅展示了如何在 Linux 中打开相机设备 我使用的是 py
  • 在 React 中测试 API 调用 - 状态未更新

    我想测试组件中的 API 调用后我的状态是否更新 我有一个方法可以说method1 在该方法中 它调用fetch并将状态设置为结果 方法如下 method1 gt if this state state1 fetch api then re
  • 使用 URL 参数自动填充表单并自动提交

    我想使用 URL 参数自动填充以下表单 例如使用如下 URL example co uk example php acct wirelesslogicde pwd jenkins 如果可能的话 我也希望自动提交 我该怎么做
  • 如何判断TBucketList的桶数

    我一直在使用 TBucketList 和 TObjectBucketList 来满足我的所有哈希需求 但从未尝试过切换存储桶的数量 我隐约记得这在数据结构类中意味着什么 但是有人可以详细说明 Delphi 中这个特定类的细微差别吗 The
  • 是否保证handle_info在超时0的情况下在init之后立即执行?

    我收到一个奇怪的错误报告 这让我认为在 gen server 初始化之前正在执行一些调用 这是初始化代码 init ResourceId gt process flag trap exit true ok not initialized R
  • 如何使用任何库在Python中将RTF字符串转换为纯文本[重复]

    这个问题在这里已经有答案了 我想在不使用正则表达式的情况下将 rtf 字符串转换为纯文本 rtfstring rtf1 ansi ansicpg1252 deff0 deflang1033 fonttbl f0 Arial colortbl
  • 如何使用curl 通过代理模拟来自Firefox 的请求?

    特别是 当我将 Firefox 设置为使用 https 流量代理时 我尝试复制 Firefox 的行为 根据我的测试 Firefox 似乎向代理发送 CONNECT 请求 而以下curl 命令直接向代理发送 GET curl proxy b
  • 将列表框的选定值显示为标签 - 多个值

    我有一个名为 lstPTLNameDHOD 的列表框 其中有多个 PTL 名称 可以使用 Ctrl 键选择这些名称 我想在标签中显示选定的姓名 或者以某种方式显示提交表单的人可以看到他们提交表单的确切对象 我的问题是我只能在标签上显示一个名
  • Python:使用另一个大字典更新一个大字典

    我正在尝试使用另一个字典中的值来更新大型字典的某些值 其中它们具有相似的键 相同的日期但格式不同 我当前使用的流程太慢 我想减少瓶颈 这是我当前的解决方案 它将更新的字典写入文件 from dateutil import parser Fi
  • 在 Node.js 中共享对象并避免全局变量

    在下面的代码片段中共享数据库连接的最合适的方式是什么 db变量 与我的路由器 控制器 无需转动db变量变成全局变量 var mongo require mongoskin db mongo db config db adress app u