Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';在这种情况下,sequel对象是否有setOwner方法?_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript 为什么';在这种情况下,sequel对象是否有setOwner方法?

Javascript 为什么';在这种情况下,sequel对象是否有setOwner方法?,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我是sequelizer的新手,不明白为什么这会导致setOwner不是函数的错误。我想它可能是在错误的上下文中执行的,但我正在注销它所调用的对象,它看起来像是一个大型sequelize对象。。。这是我的代码和错误,如果有人能给我指出正确的方向 种子文件: const { Vegetable, Gardener, Plot, db }= require('./models'); const vegetables = [{ name: 'Carrot', color: '

我是sequelizer的新手,不明白为什么这会导致setOwner不是函数的错误。我想它可能是在错误的上下文中执行的,但我正在注销它所调用的对象,它看起来像是一个大型sequelize对象。。。这是我的代码和错误,如果有人能给我指出正确的方向

种子文件:

const { Vegetable, Gardener, Plot, db }= require('./models');

const vegetables = [{
      name: 'Carrot',
      color: 'Orange',
      planted_on: new Date()
    },
    {
      name: 'Cucumber',
      color: 'Green',
      planted_on: new Date()
    },
    {
      name: 'Broccoli',
      color: 'Green',
      planted_on: new Date()
    },
    {
      name: 'Eggplant',
      color: 'Purple',
      planted_on: new Date()
}];
const gardeners = [{
      name: 'Bill',
      age: 35
    },
    {
      name: 'Suzan',
      age: 45
    },
    {
      name: 'Teresa',
      age: 55
    },
    {
      name: 'Andrew',
      age: 65
}];
const plots = [{
      size: 6,
      shaded: true
    },
    {
      size: 6,
      shaded: false
    },
    {
      size: 6,
      shaded: 0
    },
    {
      size: 6,
      shaded: 1
}];

db.sync({force: true})
  .then( _ => Promise.all(vegetables.map(vegetable => Vegetable.create(vegetable))))
  .then( _ => Promise.all(gardeners.map(gard => Gardener.create(gard))))
  .then( _ => Promise.all(plots.map(pl => Plot.create(pl))))
  .then( _ => Promise.all([Vegetable.findAll(), Gardener.findAll(), Plot.findAll()]))
  .then( data => {
      let calls = [];
      for(let i = 0; i < data[0].length; i++){
          calls.push(Gardener.findById(data[0][i].dataValues.id).then(gdnr => {
              console.log(gdnr);
              //Can't figure out why this isn't a function here
              return gdnr.setOwner(data[0][i].dataValues.id);
          }));
          //Gardener.findById(data[0][i].dataValues.id).then()//set gardner to a veggie foreign
          //Plot.findById(data[0][i].dataValues.id)//set plot a gardner foreign
      }
      return Promise.all(calls);
  })
  .catch(err => {
    console.log(err)
  })
  .finally(() => {
    db.close();
  })
错误日志:

TypeError: gdnr.setOwner is not a function
    at Gardener.findById.then.gdnr (/Users/amc/Documents/fullstack/plantr/seed.js:71:23)
    at tryCatcher (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/promise.js:693:18)
    at Async._drainQueue (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues [as _onImmediate] (/Users/amc/Documents/fullstack/plantr/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:763:18)
    at tryOnImmediate (timers.js:734:5)
    at processImmediate (timers.js:716:5)
错误之前记录的OBJCT:

gardeners { 
dataValues: 
   { id: 2,
     name: 'Suzan',
     age: 45,
     createdAt: 2018-05-01T02:11:53.993Z,
     updatedAt: 2018-05-01T02:11:53.993Z,
     favoriteVegetableId: null },
  _previousDataValues: 
   { id: 2,
     name: 'Suzan',
     age: 45,
     createdAt: 2018-05-01T02:11:53.993Z,
     updatedAt: 2018-05-01T02:11:53.993Z,
     favoriteVegetableId: null },
  _changed: {},
  _modelOptions: 
   { timestamps: true,
     validate: {},
     freezeTableName: false,
     underscored: false,
     underscoredAll: false,
     paranoid: false,
     rejectOnEmpty: false,
     whereCollection: { id: 2 },
     schema: null,
     schemaDelimiter: '',
     defaultScope: {},
     scopes: [],
     indexes: [],
     name: { plural: 'gardeners', singular: 'gardener' },
     omitNull: false,
     sequelize: 
      Sequelize {
        options: [Object],
        config: [Object],
        dialect: [PostgresDialect],
        queryInterface: [QueryInterface],
        models: [Object],
        modelManager: [ModelManager],
        connectionManager: [ConnectionManager],
        importCache: {},
        test: [Object] },
     hooks: {},
     uniqueKeys: {} },
  _options: 
   { isNewRecord: false,
     _schema: null,
     _schemaDelimiter: '',
     raw: true,
     attributes: 
      [ 'id',
        'name',
        'age',
        'createdAt',
        'updatedAt',
        'favoriteVegetableId' ] },
  __eagerlyLoadedAssociations: [],
  isNewRecord: false }

还有一个未定义的函数被记录为函数,但我认为这对gardener的sequel对象没有帮助,因为它与另一个表的关系不是由所有者决定的,蔬菜表的外键是最喜欢的蔬菜;因此,该方法将被设置为Favorite_蔬菜(蔬菜id或vegetableObject)

gardeners { 
dataValues: 
   { id: 2,
     name: 'Suzan',
     age: 45,
     createdAt: 2018-05-01T02:11:53.993Z,
     updatedAt: 2018-05-01T02:11:53.993Z,
     favoriteVegetableId: null },
  _previousDataValues: 
   { id: 2,
     name: 'Suzan',
     age: 45,
     createdAt: 2018-05-01T02:11:53.993Z,
     updatedAt: 2018-05-01T02:11:53.993Z,
     favoriteVegetableId: null },
  _changed: {},
  _modelOptions: 
   { timestamps: true,
     validate: {},
     freezeTableName: false,
     underscored: false,
     underscoredAll: false,
     paranoid: false,
     rejectOnEmpty: false,
     whereCollection: { id: 2 },
     schema: null,
     schemaDelimiter: '',
     defaultScope: {},
     scopes: [],
     indexes: [],
     name: { plural: 'gardeners', singular: 'gardener' },
     omitNull: false,
     sequelize: 
      Sequelize {
        options: [Object],
        config: [Object],
        dialect: [PostgresDialect],
        queryInterface: [QueryInterface],
        models: [Object],
        modelManager: [ModelManager],
        connectionManager: [ConnectionManager],
        importCache: {},
        test: [Object] },
     hooks: {},
     uniqueKeys: {} },
  _options: 
   { isNewRecord: false,
     _schema: null,
     _schemaDelimiter: '',
     raw: true,
     attributes: 
      [ 'id',
        'name',
        'age',
        'createdAt',
        'updatedAt',
        'favoriteVegetableId' ] },
  __eagerlyLoadedAssociations: [],
  isNewRecord: false }