Модель мангуста из другого файла возвращает значение undefined

Я пытаюсь написать MVC в nodejs. Проблема в том, что метод рендеринга возвращает undefined вместо данных базы данных. Но если я позвоню

Website.find({}, function(err, docs) {
     res.send(`docs`);
    })

прямо из index.js - работает нормально, я что-то не так делаю?

index.js:

app.get('/websites', (req, res) => {

const View       = require("./views/websitesView");
const Controller = require("./controllers/websitesController");
const Model      = require("./models/websiteModel");

var model      = new Model();
var controller = new Controller(model);
var view       = new View(controller);


res.send(view.render(req, res));
})

вид.js:

var controller = require("../controllers/websitesController");

class websitesView {
  controller;

  constructor(controller) {
    this.controller = controller;
  }

  setTab(tab) {
    this.tab = tab;
  }
  render(req, res) {

      res.send(`${this.controller.getAllWebsites()}`);

  }
}

module.exports = websitesView;

контроллер.js:

const Website = require("../models/websiteModel");


class websitesController {
  model;

  constructor(model) {
    this.model = model;
  }

  getAllWebsites() {
    Website.find({}, function(err, docs) {
     return docs;
    })
  }

}

module.exports = websitesController;

модель.js

const mongoose = require("mongoose")

const websiteSchema = new mongoose.Schema({
  url: String,
  user_id: String,
  type: String,
  status: Number,
  timestamp: Date
}, {collection: "aaa_websites"})

module.exports = mongoose.model("Website", websiteSchema, 'aaa_websites')

Использование модели Mongoose, определенной в другом файле, возвращает Undefined не помогло

🤔 А знаете ли вы, что...
Node.js позволяет создавать веб-приложения в реальном времени с помощью библиотеки Socket.io.


1
22
1

Ответ:

Решено

Попробуй это:

index.js:

app.get('/websites', async (req, res) => {

 const View       = require("./views/websitesView");
 const Controller = require("./controllers/websitesController");
 const Model      = require("./models/websiteModel");


 var controller = new Controller(Model);
 var view       = new View(controller);

 res.send(await view.render(req, res));
})

вид.js:

var controller = require("../controllers/websitesController");

class websitesView {
  controller;

  constructor(controller) {
    this.controller = controller;
  }

  setTab(tab) {
    this.tab = tab;
  }
  async render(req, res) {
      res.send(`${await this.controller.getAllWebsites()}`);
  }
}

module.exports = websitesView;

контроллер.js:

class websitesController {
  model;

  constructor(model) {
    this.model = model;
  }

  async getAllWebsites() {
    return this.model.find({})
  }

}

module.exports = websitesController;