Создание службы БД в приложении MVC Express - PullRequest
0 голосов
/ 22 февраля 2020

Я создаю приложение 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;
}

1 Ответ

0 голосов
/ 23 февраля 2020

Если someFile. js требуется до вызова метода mon go .init, экземпляр mongoBot будет создан, но пользователи действительно будут неопределенными. Если вам нужно запросить someFile перед вызовом метода init, вы можете переместить деструктурированное назначение внутрь метода someFunction.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...