Напишите функцию, чтобы найти все данные из БД Mongo и передать в контроллер - PullRequest
0 голосов
/ 25 ноября 2018

Я новичок в стэке.Я устанавливаю экспресс в модели MVC.У меня есть модель с именем Data

let getAllData = ()=>{
    Data.find({},(err,data)=>{
        if(err) throw err;
        var datas = {};

        data.forEach((data)=>{
            datas[data._id]=data;
        });

        console.log(datas);
    });
}



module.exports = {
    Data,
    store,
    getAllData
}

Я хочу вызвать getAllData из контроллера

var mongoose = require("mongoose");
var passport = require("passport");
var User = require("../models/User");
var DataModel = require("../models/Data");

var userController = {};



// Access to root page
userController.home = function(req, res) {
  // res.render('index');
  // res.send(Data.find);
    DataModel.getAllData();
    res.render('index',{//I want to send all the data to this view and view them from the page});
  }

Все, что я хочу, это создать функцию в модели для доступа ко всем данным и отображенияих на мой взгляд с контроллером в середине.Я совершенно новый и нигде не могу найти решение.

Спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

Вы должны использовать async await для этого.Это позволит вам вызвать функцию, дождаться разрешения обещания и затем ответить на запрос.

const getAllData = async () => {
  return Data.find({})
    .then(data => {})
    .catch(error => {
      throw error;
    });
};

module.exports = {
  Data,
  store,
  getAllData
};

Когда вы определяете свою функцию как асинхронную, она возвращает обещание, поэтому вы можете ожидать его ответа.

var mongoose = require("mongoose");
var passport = require("passport");
var User = require("../models/User");
var DataModel = require("../models/Data");

var userController = {};

// Access to root page
userController.home = async function(req, res) {
  // res.render('index');
  // res.send(Data.find);
  const data = await DataModel.getAllData();
  res.render("index", data);
};
...