【发布时间】:2019-06-14 19:28:52
【问题描述】:
我想知道最好的方法是初始化一个类的新实例以访问我的类中的方法。 My Class 建立数据连接,然后有一些方法来获取数据。 在我的控制器中,我有多个使用该类的功能。所以我的问题是可以为每个控制器初始化一次类,还是我需要为每个函数甚至每次调用方法都执行此操作,因为某些函数可能会多次调用多个方法或同一个方法。目前我为每个函数初始化一次类,但要确保我以正确的方式继续前进。
为了澄清一点,我的班级看起来像这样
const couchbase = require("couchbase")
var 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);
}
});
}
bucketWithName(name) {
let buckets = { "mail": this.bucket2, "contacts": this.bucket}
return buckets[name] || this.bucket // this.bucket is default
}
n1qlQuery_wId(bucketName,n1qlStr, id){
let bucket = this.bucketWithName(bucketName)
return new Promise((resolve,reject)=>{
let statement = this.N1qlQuery.fromString(n1qlStr)
statement.consistency(this.N1qlQuery.Consistency.REQUEST_PLUS)
bucket.query(statement, id, (err, result, meta)=>{
if(err){
console.log(err)
return reject(err)
}
return resolve([result, meta])
})
})
}
在我的控制器中,我现在这样称呼它
farmRoutes.get('/list', async(req, res) => {
try {
var couchdb = new couch
var myQuery = await cbQ.farmGrid(req.query, true)
var myCount = await couchdb.n1qlQuery_wId("contacts",myQuery[0],[])
var result = await couchdb.n1qlQuery_wId("contacts",myQuery[1],[] )
res.status(200).json({ Success: true , Error: "", Message: "", "RowsAffected" : result[1].metrics.resultCount, "RowCount" : myCount[0][0].count, Data: result[0]})
} catch (error) {
console.log(error)
res.status(200).json({ Success: false , Error: error.code , Message: error.message})
}
})
【问题讨论】:
-
您使用的是什么技术?根据你使用它可以完成。我有一些 Vuejs 代码,我将它们组合成一个可以通过应用程序使用的 mixin。
标签: javascript node.js