Как поместить запросы mongoose, такие как (find, findOneAndUpdate), в функцию, отличную от моего маршрута? - PullRequest
0 голосов
/ 19 мая 2019

как я могу поместить запросы mongoose, такие как (find, findOneAndUpdate), в функцию, отличную от моего маршрута? Я хочу повторно использовать эти запросы в нескольких местах в моем проекте. Вот мой простой проект: проект / хелперы / helper.js модели / customer.model.js app.js

Мой исходный файл app.js выглядит следующим образом.

let express = require("express");
let app = express();
let mongoose = require("mongoose");

let Customer = require("./models/customer.model");
let helper = require("./helpers/helper");

mongoose.connect("mongodb://localhost/rest-api-workshop", {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false
});

app.use("/test",(req, res)=> {
    Customer.find({}, "-_id")
    .then(doc => {
        return res.json(doc);
    })
    .catch(err => {
        return res.status(500).json(err);
    })
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.info(`Server has started on ${PORT}`));

мой файл customer.model.js выглядит так: let mongoose = require ("mongoose");

let CustomerSchema = new mongoose.Schema({
    name: {
        type: String,
    },
    email: {
        type: String
    }

}, { collection: 'myCustomers' });

module.exports = mongoose.model("Customer", CustomerSchema);

Использование только этих двух файлов хорошо работает при запуске http://localhost:3000/test Я получаю результаты из коллекции myCustomers.

Когда я пытаюсь поместить запрос поиска в функцию в другой файл, я ничего не возвращаю при запуске http://localhost:3000/test. При таком подходе мой новый файл app.js выглядит так:

let express = require("express");
let app = express();
let mongoose = require("mongoose");

let Customer = require("./models/customer.model");
let helper = require("./helpers/helper");

mongoose.connect("mongodb://localhost/rest-api-workshop", {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false
});

app.use("/test",(req, res)=> {
    var x = helper.runQuery();
    return res.json(x);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.info(`Server has started on ${PORT}`));

мой файл helper.js выглядит так.

module.exports = {
    runQuery: function () {
        let Customer = require("../models/customer.model");
        Customer.find({}, "-_id")
            .then(doc => {
                return doc;
            })
            .catch(err => {
                return "invalid";
            })
    }
}

Почему второй подход не работает? Я считаю, что это как-то связано с асинхронной природой узла js, но я не знаю, как решить эту проблему.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 20 мая 2019

в вашем helper.js сделать что-то вроде этого

 const Model = require('path to model');
    exports.runQuery = (req, res) => {
      Model.find()
        .then(data => {
          // do something here 
        })
        .catch(err => {
          // handle here
        });
    };

затем в app.js

const bla = require('path to helper');

app.get('/test', bla.runQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...