1

我在 nodejs 中使用 nodejs 和 mysql 客户端我正在尝试使用池函数 od mysql 模块。

"use strict";
var mysqlClient = require('mysql')
  , dbPool = mysqlClient.createPool(require('../config/database'));
function MyModel(params) {
  this.tbl = params.tbl;
  this.primary_key = params.primary_key;
  this.primary_name = params.primary_name;
  this.dbPool = dbPool;
}
module.exports = MyModel;
//primary key
MyModel.prototype.fromPK = function fromPK(pk, callback) {
  this.dbPool.getConnection(function (err, connection) {
  var query = "SELECT * FROM " + this.tbl + " WHERE " + this.primary_key + " = " + connection.escape(pk);
    connection.query(query, callback);
  });
};

我知道我无法访问thisgetConnection 内部,我可以简单地var t = this在它外部设置并使用 var t 访问它,但是在这种情况下还有其他方法可以访问thisvar。var t = this我应该在我编写的每个原型函数中定义吗?

我有以下详细的要点 https://gist.github.com/yalamber/6bd1df0cc27849eb09b3

4

1 回答 1

1

您可以使用 确定this函数中的内容.bind()

详细的语法是:

var newfunction = oldfunction.bind(THIS_OBJECT);

那将THIS_OBJECT成为. 如您所见,返回一个新的(绑定的)函数。thisoldfunction.bind()

不过,您不需要那种复杂的语法,它也适用于匿名函数:

var newfunction = function() { ... }.bind(THIS_OBJECT);

在你的情况下,你可以使用这个:

this.dbPool.getConnection(function (err, connection) {
  var query = "SELECT * FROM " + this.tbl + " WHERE " + this.primary_name + " = " + connection.escape(pn);
  connection.query(query, callback);
}.bind(this));

这使得this内部回调函数与this外部相同。

于 2013-05-30T07:54:24.573 回答