猫鼬如何在单个路径中保存多个集合

时间:2019-07-18 01:54:40

标签: node.js express mongoose

我想在单个快递路线中保存多个集合。我在快递路线文件中使用以下代码。

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发送两次。请让我知道如何将两次保存和回复合并为一个。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以将第二条记录保存在第一条记录的then块中。

或者有一种更好的方法可以使用async/awaittry/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
  }
})