我正在创建一个MERN应用程序,并试图编写一个findOrCreate函数,该函数将Schema,搜索字段和其他用于创建的字段作为输入。使用此findOrCreate函数,我想创建条目,这些条目将用作后续对另一个Schema的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秒钟以上的时间将响应返回给服务器,并且经常超时。我该如何解决?