最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node.js:如何以最简单的方式将util.promisify应用于mysql池?

IT培训 admin 4浏览 0评论

Node.js:如何以最简单的方式将util.promisify应用于mysql池?

我看到了another thread和后Create a MySQL Database Middleware with Node.js 8 and Async/Await,但是现在我只想以最简单和最直接的方式使用util.promisify,我可以想到,将它应用到mysql连接池。关于Node.js documentation,bellow是我的代码snipet:

exports.genAdminCfg = function (app) {
  let sql = 'SELECT * FROM nav_tree;';

  let pool = require('mysql').createPool({
    host: 'localhost',
    user: 'root',
    password: 'mysql',
    database: 'n4_ctrl',
    connectionLimit: 4,
    multipleStatements: true
  });

  /* --- Works fine without "promisify":
   pool.query(sql, function (err, rows) {
     if (err) {
       console.log(err);
       return err;
     } else {
       app.locals.adminCfg = genCfg(rows);
       app.locals.adminCfg.dbConnectionPool = pool;
     }
   });
  */

  /* --- Does not worke with "promisify":
     TypeError: Cannot read property 'connectionConfig' of undefined
       at Pool.query (/usr/home/zipper/node/n4.live/node_modules/mysql/lib/Pool.js:194:33)
  */
  require('util').promisify(pool.query)(sql).then(function (rows) {
    app.locals.adminCfg = genCfg(rows);
    app.locals.adminCfg.dbConnectionPool = pool;
  }, function (error) {
    console.log(error);
  });

};

我评论的代码在没有promisify的情况下工作正常。但是与promisify相邻的类似代码不起作用并显示TypeError: Cannot read property 'connectionConfig' of undefined。代码有什么问题?

node version = v8.1.4

回答如下:

除非另有证明,否则始终应该预期方法依赖于上下文。

由于pool.query是一种方法,它应该被绑定到正确的上下文:

const query = promisify(pool.query).bind(pool);

这可能是不必要的,因为大多数流行的图书馆都有基于承诺的替代方案,可以利用承诺,including mysql

Node.js:如何以最简单的方式将util.promisify应用于mysql池?

我看到了another thread和后Create a MySQL Database Middleware with Node.js 8 and Async/Await,但是现在我只想以最简单和最直接的方式使用util.promisify,我可以想到,将它应用到mysql连接池。关于Node.js documentation,bellow是我的代码snipet:

exports.genAdminCfg = function (app) {
  let sql = 'SELECT * FROM nav_tree;';

  let pool = require('mysql').createPool({
    host: 'localhost',
    user: 'root',
    password: 'mysql',
    database: 'n4_ctrl',
    connectionLimit: 4,
    multipleStatements: true
  });

  /* --- Works fine without "promisify":
   pool.query(sql, function (err, rows) {
     if (err) {
       console.log(err);
       return err;
     } else {
       app.locals.adminCfg = genCfg(rows);
       app.locals.adminCfg.dbConnectionPool = pool;
     }
   });
  */

  /* --- Does not worke with "promisify":
     TypeError: Cannot read property 'connectionConfig' of undefined
       at Pool.query (/usr/home/zipper/node/n4.live/node_modules/mysql/lib/Pool.js:194:33)
  */
  require('util').promisify(pool.query)(sql).then(function (rows) {
    app.locals.adminCfg = genCfg(rows);
    app.locals.adminCfg.dbConnectionPool = pool;
  }, function (error) {
    console.log(error);
  });

};

我评论的代码在没有promisify的情况下工作正常。但是与promisify相邻的类似代码不起作用并显示TypeError: Cannot read property 'connectionConfig' of undefined。代码有什么问题?

node version = v8.1.4

回答如下:

除非另有证明,否则始终应该预期方法依赖于上下文。

由于pool.query是一种方法,它应该被绑定到正确的上下文:

const query = promisify(pool.query).bind(pool);

这可能是不必要的,因为大多数流行的图书馆都有基于承诺的替代方案,可以利用承诺,including mysql

发布评论

评论列表 (0)

  1. 暂无评论