我想在单个快递路线中保存多个集合。我在快递路线文件中使用以下代码。
const userinfo = require('../models/userinfo');
const userdtls = require('../models/userdtls');
router.post('/add', function(req, res) {
mongoose.connect(config.DB,{ useNewUrlParser: true }, function (err) {
if (err) throw err;
let newuserdtls = new userdtls({
userid: '1001',
username: req.body.username
})
newuserdtls.save()
.then(result => {
res.json(result);
console.log('successfully inserted');
})
.catch(err => {
res.json(err)
console.log('inserted failed',err);
})
let newuserinfo = new userinfo({
userid: '1001',
username: req.body.username,
gender: req.body.gender,
class: req.body.class,
status: req.body.status
})
newuserinfo.save()
.then(result => {
res.json(result);
console.log('successfully inserted');
})
.catch(err => {
res.json(err)
console.log('inserted failed',err);
})
})
})
我想作为单个事务插入这两个模型中。两者都应成功插入。如果一个失败,另一个也应该失败。我还收到使用此代码的“ ERR_HTTP_HEADERS_SENT:将标头发送到客户端后无法设置标头” ,但这可能是因为res.send发送两次。请让我知道如何将两次保存和回复合并为一个。
谢谢
答案 0 :(得分:1)
您可以将第二条记录保存在第一条记录的then
块中。
或者有一种更好的方法可以使用async/await
和try/catch
:
router.post('/add', async function(req, res) {
try {
await mongoose.connect(config.DB,{ useNewUrlParser: true });
let newuserdtls = new userdtls({
userid: '1001',
username: req.body.username
})
await newuserdtls.save();
let newuserinfo = new userinfo({
userid: '1001',
username: req.body.username,
gender: req.body.gender,
class: req.body.class,
status: req.body.status
})
await newuserinfo.save();
res.json(YOUR_RESULT);
} catch(err) {
// Handle error here
}
})