我在控制器中有一个函数,如果数据库中满足某个条件,它希望创建两个不同的模型。API被称为:
PUT localhost:3000/用户
调用app.post('/user',user.create(
user.create在一个控制器文件中:
const business = require("./controllers/business.controller.js");
exports.create = (req,res) => {
const user = new User ({
email: req.body.email
uniqueAccount: req.body.unique
})
User.create (user, function(err,doc){
if (err) res.status(500).send(err)
if (user.uniqueAccount) {
let result = business.create(req,res)
console.log(result)
}
res.send(doc)
})
}
在业务控制器中,它具有相同的功能:
exports.create = (req,res) => {
const business = new Business({
name: req.body.businessname
})
Business.create (business, function(err,doc){
if (err) return err
return doc
}
}
因为我的线路:
let result = business.create(req,res)
没有承诺等待,我看不到业务主管的回复。我试着使用.then函数,但遇到了错误:
类型错误:无法读取未定义的的属性'then'
我该怎么做?我可以将模型导入到我的用户控制器中,然后在用户控制器中创建业务模型,但我想将目的分开。
只有当函数返回promise时,才能对其使用await,因此从业务控制器返回promise,而不是返回简单值。
您可以承诺您的业务控制器函数,然后在user.create函数中使用wait。这样做:
const business = require("./controllers/business.controller.js");
exports.create = (req,res) => {
const user = new User ({
email: req.body.email
uniqueAccount: req.body.unique
})
User.create (user, async function(err,doc){
if (err) res.status(500).send(err)
if (user.uniqueAccount) {
let result = await business.create(req,res)
console.log(result)
}
res.send(doc)
})
}
现在承诺您的业务控制器功能。
exports.create = (req,res) => {
return new Promise((resolve,reject)=>{
const business = new Business({
name: req.body.businessname
})
Business.create (business, function(err,doc){
if (err) reject(err)
resolve(doc)
}
});
}