我正在寻找一种方法,可以传递诸如存储桶名称之类的值,然后使用该值在类中的方法中填充值。我有一个控制器,它是一个建立两个连接的类,一个称为bucket,另一个称为bucket2。两种方法是相同的,除了一个使用存储桶而另一个使用存储桶2。我想避免创建双重方法,而使用变量来确定该方法正在使用哪个存储桶。
下面是我的控制器类
const couchbase = require("couchbase")
const config = require("../config/config")
class CouchController {
constructor() {
this.cluster = new couchbase.Cluster(config.cluster);
this.cluster.authenticate(config.userid, config.password)
this.N1qlQuery = couchbase.N1qlQuery;
this.bucket = this.cluster.openBucket('Contacts', function(err) {
if (err) {
console.error('Got error: %j', err);
}
});
this.bucket2 = this.cluster.openBucket('mail_store', function(err) {
if (err) {
console.error('Got error: %j', err);
}
});
}
getDoc(docID) {
return new Promise((resolve, reject) => {
this.bucket.get(docID, (err, result) => {
if (err) return reject(err);
return resolve({ docID, result });
});
});
}
getDoc2(docID) {
return new Promise((resolve, reject) => {
this.bucket2.get(docID, (err, result) => {
if (err) return reject(err);
return resolve({ docID, result });
});
});
}
}
module.exports = CouchController
我刺了一下它,想出了一个可行的解决方案,但它并不是我想要的干净
getDoc(bucket, docID) {
if (bucket == "bucket2") {
bucket = this.bucket2
} else {
bucket = this.bucket
}
return new Promise((resolve, reject) => {
bucket.get(docID, (err, result) => {
if (err) return reject(err);
return resolve({ docID, result });
});
});
}
答案 0 :(得分:1)
我想我会将“存储桶对象”映射到存储桶名称...
bucketWithName(name) {
let buckets = { bucket2: this.bucket2, ... others here ...}
return buckets[name] || this.bucket // this.bucket is default
}
getDoc(bucketName, docID) {
let bucket = this.bucketWithName(bucketName);
return new Promise((resolve, reject) => {
bucket.get(docID, (err, result) => {
if (err) return reject(err);
return resolve({ docID, result });
});
});
}
答案 1 :(得分:0)
稍微不同的解决方案是将存储桶作为参数传递,而不是使用变量来决定使用哪个变量。作为示例:
getDoc(bucket, docID) {
return new Promise((resolve, reject) => {
bucket.get(docID, (err, result) => {
if (err) return reject(err);
return resolve({ docID, result });
});
});
}
并用
this.getDoc(this.bucket, some_id);
(如果您需要在此上下文中使用存储桶)或this.getDoc(this.bucket2, some_id);
(如果您需要在此上下文中使用存储桶2)。
希望对您有帮助!