Я создаю приложение Node / Express / Mon go и хотел бы иметь макет файла в стиле MVC с отдельной службой базы данных. Я бы хотел, чтобы мои маршруты (контроллеры) были достаточно простыми и просто вызывали методы из других мест, когда мне нужно было выполнять функции CRUD.
В этом замечательном посте было много ответов solid , Ниже я вставлю ответ из EddieDean , который, кажется, наиболее близок к тому, что я хотел бы сделать.
Однако, когда я пытаюсь сослаться на объект Users, определенный в файл mongo.js
в моем файле someFile.js
, он возвращается как undefined. Я почти уверен, что упускаю что-то очевидное и хотел бы знать, что это такое.
Я могу получить ссылку на само соединение с БД и вызвать dbConn.Users.addUser(x)
, но я не могу напрямую вызвать Users.addUser(x)
, как в примере someFile.js
ниже.
Это кажется незначительным, но я потратил слишком много времени на это, чтобы нет ответа. Назовите это вендеттой знаний.
Спасибо.
пн go. js
const { MongoClient } = require('mongodb');
const config = require('./config');
const Users = require('./Users');
const conf = config.get('mongodb');
class MongoBot {
constructor() {
const url = `mongodb://${conf.hosts.join(',')}`;
this.client = new MongoClient(url, conf.opts);
}
async init() {
await this.client.connect();
console.log('connected');
this.db = this.client.db(conf.db);
this.Users = new Users(this.db);
}
}
module.exports = new MongoBot();
Пользователи. js
class User {
constructor(db) {
this.collection = db.collection('users');
}
async addUser(user) {
const newUser = await this.collection.insertOne(user);
return newUser;
}
}
module.exports = User;
приложение. js
const mongo = require('./mongo');
async function start() {
// other app startup stuff...
await mongo.init();
// other app startup stuff...
}
start();
someFile. js
const { Users } = require('./mongo');
async function someFunction(userInfo) {
const user = await Users.addUser(userInfo);
return user;
}