一个承诺的 mysql 模块将如何与 NodeJS 一起工作?

     2023-02-24     247

关键词:

【中文标题】一个承诺的 mysql 模块将如何与 NodeJS 一起工作?【英文标题】:How will a promisified mysql module work with NodeJS? 【发布时间】:2014-09-07 22:58:29 【问题描述】:

我正在尝试在 NodeJS 中使用 MySQL。我的整个应用都是用 Promise 构建的,所以我也想 Promisify mysql 模块。

所以我有这个:

Promise = require('bluebird');
var mysql = Promise.promisifyAll(require('mysql'));

现在,根据他们的 API,connect() 方法接受单个参数,即在发生连接错误时调用的 err 回调。我的问题是,这如何转化为承诺?

promise 会在错误时解决吗?会被拒绝吗?我可能需要.catch() 吗?它是如何工作的?

【问题讨论】:

【参考方案1】:

如果一个方法是一个带有单个参数的节点“errback”——它将在then 中没有参数的情况下被解析,或者通过传递给它的err 被拒绝。在 Promisification 的情况下,您可以使用 .error 捕获它或使用 Promise.OperationalError 捕获它。

这是一个简单的方法:

function getConnection()
    var connection = mysql.createConnection(
      host     : 'localhost',
      user     : 'me',
      password : 'secret'
    );
    return connection.connectAsync().return(connection); // <- note the second return


getConnection().then(function(db)
    return db.queryAsync(....);
).error(function()
   // could not connect, or query error
);

如果这是用于管理连接 - 我会使用 Promise.using - 这是来自 API 的示例:

var mysql = require("mysql");
// uncomment if necessary
// var Promise = require("bluebird");
// Promise.promisifyAll(mysql);
// Promise.promisifyAll(require("mysql/lib/Connection").prototype);
// Promise.promisifyAll(require("mysql/lib/Pool").prototype);
var pool  = mysql.createPool(
    connectionLimit: 10,
    host: 'example.org',
    user: 'bob',
    password: 'secret'
);

function getSqlConnection() 
    return pool.getConnectionAsync().disposer(function(connection) 
        try 
            connection.release();
         catch(e) ;
    );


module.exports = getSqlConnection;

这会让你做什么:

Promise.using(getSqlConnection(), function(conn)
    // handle connection here, return a promise here, when that promise resolves
    // the connection will be automatically returned to the pool.
);

【讨论】:

有没有办法像 getConnectionAsync() 那样进行异步查询,我可以在 promise.using 函数中调用它。或者我必须在 promise.using() 中创建新的承诺。

如何将 nodeJS 集群与 mySQL 池集群一起使用?

...如果我使用4个工作人员(我的应用程序的4个实例)创建一个节点集群应用程序,我应该使用mySQL池还是mysql池集群?如果我使用池,它将为每个应用程序创建一个池,但如果我使用池集群,它将为每个应用程序创建4个池(总共1 查看详情

使用 mySQL 和 nodejs 传递承诺

】使用mySQL和nodejs传递承诺【英文标题】:PassingpromiseswithmySQL&nodejs【发布时间】:2020-11-1007:08:16【问题描述】:我在从包含多个MySQL查询的函数中访问Promise时遇到问题。我需要提出多个问题,并且需要从数据库中当前的内容... 查看详情

如何在 Node js 中承诺一个 mysql 池连接?

】如何在Nodejs中承诺一个mysql池连接?【英文标题】:HowtopromisifyamysqlpoolconnectioninNodejs?【发布时间】:2021-07-1519:31:42【问题描述】:我正在尝试了解如何使用节点js工具来承诺池连接。我会使用async/await逻辑保持我的代码干净(... 查看详情

将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)

...11-08-1804:59:24【问题描述】:我是node和express的新手,我有一个关于使用mysql。我有一个发布到“/login”的登录表单。我正在使用node-mysql模块。app.get(\'/site\',function(req 查看详情

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?

...020-04-1910:17:45【问题描述】:我正在使用nodejs和express创建一个api,我想将http2与ExpressJS集成这是我的代码:\'usestrict\';consthttp2=require(\' 查看详情

与 fs 和 bluebird 的承诺

...】:我目前正在学习如何在nodejs中使用Promise所以我的第一个挑战是列出目录中的文件,然后使用异步函数通过两个步骤获取每个文件的内容。我想出了以下解决方案,但有一种强烈的感觉,这不是最优雅的方法,尤其是我将异... 查看详情

如何使用 Bluebird 承诺 NodeJS Express

】如何使用Bluebird承诺NodeJSExpress【英文标题】:HowtopromisifyNodeJSExpresswithBluebird【发布时间】:2014-09-0720:59:14【问题描述】:我将NodeJS与Express一起使用,并使用Bluebird进行承诺。我正在尝试如下承诺app对象,但一旦承诺的函数总是... 查看详情

如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js

....js【发布时间】:2018-08-0521:35:47【问题描述】:我需要将一个json对象返回给我的api。为此,我有一个执行一些请求并应返回结果的模块。我的问题是掌握 查看详情

如何承诺此功能-nodejs [重复]

...uplicate]【发布时间】:2016-04-1615:46:43【问题描述】:我有一个需要返回承诺的ajax调用。函数如下client.tickets.create(ticket,function(err,req,result)if(err)logger.error(err);returnfalse;return 查看详情

Nodejs - 将属性上的承诺数组解析为对象数组

...:07【问题描述】:运行Nodev8+,以及bluebird和lodash库。这是一个假对象数组:consttheList=[name:\'foo\'values:[promise,promise,promise],na 查看详情

如何创建从 nodejs mysql 模块获取的正确 json 类型数据?

...计们,我从事网络项目已经很长时间了。我现在正在创建一个实时通知系统,我正在使用nodejs+socketio。我很高兴在***上的专家的帮助下我能够在不 查看详情

你如何将 setTimeout 包装在一个承诺中[重复]

】你如何将setTimeout包装在一个承诺中[重复]【英文标题】:HowdoyouwrapsetTimeoutinapromise[duplicate]【发布时间】:2016-02-2321:49:32【问题描述】:我正在尝试为返回承诺的对象运行测试套件。我想将几个动作与它们之间的短暂超时链接... 查看详情

Nodejs:按顺序运行承诺

】Nodejs:按顺序运行承诺【英文标题】:Nodejs:runpromisessequentially【发布时间】:2020-06-1616:36:29【问题描述】:对于我需要在F5大IP上使用private_key_jwt进行oauth客户端身份验证的工作。由于oauth的内置模块不负责这种身份验证,因此... 查看详情

NodeJS 不能等待 MySQL 数据库承诺,而是等待其他承诺

】NodeJS不能等待MySQL数据库承诺,而是等待其他承诺【英文标题】:NodeJScan\'tawaitMySQLdatabasepromise,butawaitsotherpromises【发布时间】:2021-10-1002:36:57【问题描述】:letstatic_times_generate=async(static_file_path)=>//ImportMySQLdatabasepoolconnection:co 查看详情

NodeJS 中的 Firebase javascript 承诺

...014:23:08【问题描述】:我需要为一些复杂的业务逻辑部署一个node.js服务器。是否有任何firebase库/模块允许我对查询和更新/设置方法使用承诺而不是回调?我找到了firebase-client,但它是基于REST的。如果有的话,我更喜欢基于javasc... 查看详情

NodeJS - 对承诺函数的无限调用

...到数据库中。我正在学习承诺,有人可以解释一下为什么一个有效而另一个无效吗?在我的代码下方工作代码该函数只被调用一次 查看详情

异步 axios 不使用 NODEJS 运行承诺

...【发布时间】:2018-06-0923:46:31【问题描述】:我正在开发一个多人游戏,在客户端使用vue并使用nojejs作为游戏服务器(我使用vue-sockets.io与客户端和服务器通信)。当我在节点端创建游戏实例时,它将具有图块并隐藏(两个图像... 查看详情

nodejs操作mysql数据库(代码片段)

1、操作数据库的步骤安装操作MySQL数据库的第三方模块(mysql)通过mysql模块连接到MySQL数据库通过mysql模块执行SQL语句 2、安装与配置mysql模块2.1、安装mysql模块mysql模块是托管于npm上的第三方模块。它提供了在Node.js项目... 查看详情