4

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"

metamarcdw
  • 41
  • 4

0 Answers0