Javascript 为什么';在这种情况下,sequel对象是否有setOwner方法?
我是sequelizer的新手,不明白为什么这会导致setOwner不是函数的错误。我想它可能是在错误的上下文中执行的,但我正在注销它所调用的对象,它看起来像是一个大型sequelize对象。。。这是我的代码和错误,如果有人能给我指出正确的方向 种子文件: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: '
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 }