как я могу поместить запросы 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, но я не знаю, как решить эту проблему.
Любая помощь приветствуется.