Вы пытались убрать свой код инициализации из функции промежуточного программного обеспечения?Документация Couchbase не показывает, как она используется таким образом.Хотя пример в ванильном узле.Поместив его в функцию промежуточного программного обеспечения, вы будете повторно подключаться к своей базе данных каждый раз, когда сервер получает запрос.
Я подключаюсь к своему серверу Mongo в теле app.js верхнего уровня, которое позволяетсвязь сохраняться.Затем я могу просто импортировать ссылку на mongoose, которая мне нужна в моих моделях и контроллере, чтобы наметить, как получать определенные данные, а затем вызвать метод контроллера внутри соответствующей конечной точки маршрута.
Отредактировано, чтобы показать примерназначение поля в качестве поля класса контроллера
В вашем app.js
const couchbase = require("couchbase");
const config = require("../config/config");
// ...app.js
const CouchController = require("../controllers/CouchController")(couchbase, config);
// app.js...
В вашем контроллере
class CouchController {
constructor(couchbase, config) {
// You may either pass couchbase and config as params, or import directly into the controller
this.cluster = new couchbase.Cluster(config.cluster);
this.cluster.authenticate(config.userid, config.password);
this.bucket = cluster.openBucket(config.bucket);
this.N1qlQuery = couchbase.N1qlQuery;
}
doSomeQuery(queryString, callback) {
// Use your query however its meant to be used. I'm not familiar with couchbase queries.
this.bucket.manager().createPrimaryIndex(function() {
this.bucket.query(
this.N1qlQuery.fromString("SELECT * FROM bucketname WHERE $1 in interests LIMIT 1"),
[queryString],
callback(err, result)
)
});
}
}
Затем вызовите метод Controller изнутри маршрута
router.get("/", function(req, res, next) {
let searchParam = req.query.someParam;
CouchController.doSomeQuery(searchParam)
.then(result => {
res.json(result);
});
});