开发者问题收集

Sequelize seeder:意外的标识符错误,没有堆栈跟踪进一步解释它

2019-07-25
3035

我在使用 Sequelize 时遇到了一个问题,运行带有 autoIncrement 键的 Postgres 的 sequelize:seed 时,无法向该表添加新项目。Sequelize 不会自动将模型与表中的最新 ID 同步,因此在添加种子数据后,我收到了重复键错误。

我试图用我在这里找到的一些建议来修复它,关于在种子文件运行后重新同步序列,但我收到了 Unexpected Identifier 错误,没有进一步的解释。

这是我的代码 - 谁能告诉我哪里出了问题?我的 linter 没有抛出任何错误,所以我不 认为 这是一个标准语法错误:

'use strict';
const db = require('../models');

module.exports = {
  up: async (queryInterface, Sequelize) => {
    /*
      Add altering commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.bulkInsert('People', [{
        name: 'John Doe',
        isBetaMember: false
      }], {});
    */
    return await queryInterface
      .bulkInsert('user_podcasts', [
        {
          id: 1,
          userId: 1,
          podcastId: '88b15eefe35d42c58bca9c5e17080661',
          createdAt: new Date().toISOString(),
          updatedAt: new Date().toISOString()
        },
        {
          id: 2,
          userId: 1,
          podcastId: '7f519d33692246a98688a1415c3c591c',
          createdAt: new Date().toISOString(),
          updatedAt: new Date().toISOString()
        },
        {
          id: 3,
          userId: 2,
          podcastId: '7f519d33692246a98688a1415c3c591c',
          createdAt: new Date().toISOString(),
          updatedAt: new Date().toISOString()
        },
        {
          id: 4,
          userId: 2,
          podcastId: 'd9604d45a8494577bec068df875fb69d',
          createdAt: new Date().toISOString(),
          updatedAt: new Date().toISOString()
        }
      ])
      .then(async () =>
        db.query(
          `ALTER SEQUENCE "${
            model.user_podcasts
          }_id_seq" RESTART WITH ${(await model.count()) + 1}`
        )
      )
      .catch(error => {
        if (error.message.indexOf('already exists') > -1) return;
        console.log(error);
      });
  },

  down: (queryInterface, Sequelize) => {
    /*
      Add reverting commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.bulkDelete('People', null, {});
    */
  }
};

1个回答

使用此命令 获取错误堆栈跟踪 。请注意 --debug 选项。

sequelize-cli db:migrate --debug

如果您尚未安装 sequelize-cli,请使用以下命令进行安装。

npm install sequelize-cli 

如果您愿意,可以使用 -g 选项进行全局安装。

mohammed_ayaz
2020-01-13