1

nodejs で nodejs と mysql クライアントを使用しています。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 でアクセスできますが、この状態で var にvar t = thisアクセスする他の方法はありますか。作成する各プロトタイプ関数でthis定義する必要がありますか?var t = this

詳細な要点をフォローしています https://gist.github.com/yalamber/6bd1df0cc27849eb09b3

4

1 に答える 1

1

thisを使用して、関数の内容を判別できます.bind()

複雑な構文は次のとおりです。

var newfunction = oldfunction.bind(THIS_OBJECT);

それは内THIS_OBJECTthisオブジェクトになりoldfunctionます。ご覧のとおり.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 に答える