NodeJS Sequelize:设置关联值的问题

时间:2016-07-31 10:32:15

标签: node.js express sequelize.js

我在两个表,产品和服务之间存在多对多关系,通过连接表与成本列product_service连接。当我创建尝试向产品添加服务时,第一次调用不会返回更新的值,即使数据库已更新,我知道因为我检查它,我只能看到我的应用程序上的更新值另一个电话。

 var query = {
    where: {
      id: req.params.id
    },
    include: defaultIncludes()
  }
  models.products.findOne(query)
  .then(function (product) {
    if (!product) {
      return res.status(404).json({message: 'Product not found' });
    } else {
      this.product = product;
      return models.services.findById(req.body.service_id);
    }
  })
  .then(function (service) {
    return this.product.addServices(service);
  })
  .then(function (result) {
    return this.product.save();
    // return models.products.findOne(query);
  })
  .then(function (product) {
    return res.status(200).json(product)
  })
  .catch(function (err) {
    logger.error(err);
    return res.status(500).json({error: err.message});
  });

我认为它可能与promises有关,无论是对于addServices还是save函数,但我似乎无法弄明白。

1 个答案:

答案 0 :(得分:1)

首先,您不需要在product.save()之后致电product.addServices(service)。然后,这2个函数不会将更新的实例作为回调函数的第一个参数传递。

因此,在您的情况下,您可以执行以下操作:

...
.then(function (service) {
   return this.product.addServices(service);
})
.then(function () {
   return res.status(200).json(this.product)
})
.catch(function (err) {
   logger.error(err);
   return res.status(500).json({error: err.message});
});