Я создаю приложение MERN и пытаюсь написать функцию findOrCreate, которая принимает в качестве входных данных схему, поля поиска и дополнительные поля для создания. Используя эту функцию findOrCreate, я хочу создать записи, которые будут служить полями для последующего вызова findOrCreate для другой схемы. Вот код, который у меня есть:
findOrCreate = async (Schema, findFields, additionalCreateFields, cb) => {
await Schema.findOne(findFields, async (err, docs) => {
if (err) {
console.log(err)
return cb(err);
}
if (docs) {
// docs found, Return
console.log("Found Existing")
return cb(err, docs);
} else {
// no docs found, create
console.log("Creating New")
docs = await Schema.create({
...findFields,
...additionalCreateFields
});
return cb(err, docs)
}
})
}
router.post('/create/', async(req, res, next) => {
try {
let course, classroom;
await findOrCreate(Course, {
department: req.body.courseDept,
code: req.body.courseCode,
}, {
name: req.body.courseName
}, (err, docs) => {
if (err)
console.log(err);
else {
course = docs;
}
});
await findOrCreate(Classroom, {
course: course,
professor: req.body.professorName,
}, {
link: req.body.course_link
}, (err, docs) => {
if (err)
console.log(err);
else {
classroom = docs;
return docs;
}
});
res.status(200).json(classroom);
} catch (e) {
error.log(e);
res.status(500).json({});
}
});
Я пытался использовать возвращаемое значение первого вызова findOrCreate для инициализации переменной course
, но она всегда получалась как undefined
. Метод, который я сейчас использую, очень медленный и использует более 10 секунд, чтобы вернуть ответ серверу, и он часто истекает. Как мне это исправить?