I am trying to set up a seeder for my Sequelize models. I have a single 1-many association. All of my syntax appears to be correct and passes through my linter (semistandard) successfully.
Whenever I run either version using sequelize db:seed:all
, I receive an (extremely unhelpful) error that consists solely of the message "ERROR: Unexpected Identifier" without a filename, line number, or any stack trace.
I have tried using async/await as well as normal Promises.
Async/await version of my seeder (seed object arrays are shortened):
'use strict';
const uuid = require('uuid/v4');
const bcrypt = require('bcrypt');
const models = require('../models');
module.exports = {
up: async (queryInterface, Sequelize) => {
const passwordHash = await bcrypt.hash('password', 10);
await queryInterface.bulkInsert('Users', [
{
public_id: uuid(),
name: 'Snoop',
password_hash: passwordHash,
admin: true,
createdAt: new Date(),
updatedAt: new Date()
}
], {});
const user = await models.User.findOne({
where: { admin: true }
});
const result = await queryInterface.bulkInsert('Todos', [
{
text: 'Do a thing',
complete: true,
user_id: user.id,
createdAt: new Date(),
updatedAt: new Date()
}
], {});
return result;
},
down: async (queryInterface, Sequelize) => {
await queryInterface.bulkDelete('Todos', null, {});
await queryInterface.bulkDelete('Users', null, {});
}
};
Version using Promises:
'use strict';
const uuid = require('uuid/v4');
const bcrypt = require('bcrypt');
const { User } = require('../models');
function getSeedUsers (passwordHash) {
return [
{
public_id: uuid(),
name: 'Snoop',
password_hash: passwordHash,
admin: true,
createdAt: new Date(),
updatedAt: new Date()
}
];
}
function getSeedTodos (userId) {
return [
{
text: 'Do a thing',
complete: true,
user_id: userId,
createdAt: new Date(),
updatedAt: new Date()
}
];
}
module.exports = {
up: (queryInterface, Sequelize) => {
return new Promise((resolve, reject) => {
bcrypt.hash('password', 10)
.then(passwordHash => {
queryInterface.bulkInsert('Users', getSeedUsers(passwordHash), {})
.then(() => {
User.findOne({ where: { admin: true } })
.then(user => {
queryInterface.bulkInsert('Todos', getSeedTodos(user.id), {})
.then(result => resolve(result))
.catch(err => reject(err));
})
.catch(err => reject(err));
})
.catch(err => reject(err));
})
.catch(err => reject(err));
});
},
down: (queryInterface, Sequelize) => {
return Promise.all(
queryInterface.bulkDelete('Todos', null, {}),
queryInterface.bulkDelete('Users', null, {})
);
}
};
Expected: Successful database seeding
Actual: "ERROR: Unexpected Identifier"