使用sequelize使用hasMany关系postgresql制作API

时间:2017-05-23 01:49:51

标签: node.js postgresql sequelize.js

我在node.js和express之上使用sequilize,以便创建一个我的反应可以使用本教程http://mherman.org/blog/2015/10/22/node-postgres-sequelize/#.WSJ77BMrLBL访问的API。我无法让数据库填充一个名为带产品的商店的对象。我现在所拥有的是:

路线:

sum =0;
for(int i =0;i<arraySize;i++){
     sum+=array[i];
}

存储

    // get all stores
router.get('/stores', function(req, res) {
  models.Store.findAll({}).then(function(stores) {
    res.json(stores);
  });
});

// get single store
router.get('/stores/:id', function(req, res) {
  models.Store.find({
    where: {
      id: req.params.id
    }
  }).then(function(store) {
    res.json(store.productId);
  });
});

// add new store
router.post('/stores', function(req, res) {
  models.Store.create({
    name: req.body.name,
    productId: req.body.product_id
  }).then(function(store) {
    res.json(store);
  });
});

但是当我运行 'use strict'; module.exports = function(sequelize, DataTypes) { var Store = sequelize.define('Store', { name: { type: DataTypes.STRING, defaultValue: "" }, description: { type: DataTypes.STRING, defaultValue: "" }, phone: { type: DataTypes.STRING, defaultValue: "" }, email: { type: DataTypes.STRING, defaultValue: "" }, image_url: { type: DataTypes.STRING, defaultValue: "" }, }, { classMethods:{ associate:function(models){ Store.hasMany(models.Product, { foreignKey: 'productId'} ); } } }); return Store; }

我得到: curl --data "name=test&product_id=1" http://127.0.0.1:5000/stores当我导航到商店页面时,我得到相同的东西,但看不到productIds

我做错了什么?有人可以提供一些指导。

谢谢!

1 个答案:

答案 0 :(得分:3)

Sequelize不会急于加载产品,除非您明确告诉它包含相关模型。将以下选项添加到models.Store.findById请求中。

const options = {
    include: [{
        model: models.Product
    }]
};

所以它写着:

models.Store.findById(req.params.id, options).then( ...

您的回复将包含一个Products密钥,该密钥将是相关产品的数组。