首页 > 解决方案 > Node.js - SequelizeDatabaseError:列“user_id”不存在

问题描述

我有一个非常简单的架构,但是当我尝试调用数据时,它会返回错误

SequelizeDatabaseError: column "user_id" does not exist

我的数据库仅包含三个表。以下是所有这些的架构文件:

用户

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('users', {
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {});
  User.associate = function (models) {
    User.hasMany(models.survey_instances)
  };
  return User;
};

调查实例


module.exports = (sequelize, DataTypes) => {
  const SurveyInstances = sequelize.define('survey_instances', {
    userId: {
      field: 'user_id',
      type: DataTypes.INTEGER
    },
    templateId: {
      field: 'template_id',
      type: DataTypes.INTEGER
    },
    fields: DataTypes.JSONB,
  }, {
    underscored: true,
  });
  SurveyInstances.associate = function (models) {
    SurveyInstances.belongsTo(models.survey_templates, { foreignKey: 'templateId' })
    SurveyInstances.belongsTo(models.users, { foreignKey: 'userId' })
  };
  return SurveyInstances;
};

调查模板

module.exports = (sequelize, DataTypes) => {
  const SurveyTemplates = sequelize.define('survey_templates', {
    fields: DataTypes.JSONB,
  }, {});
  SurveyTemplates.associate = function (models) {
    SurveyTemplates.hasMany(models.survey_instances)
  };
  return SurveyTemplates;
};

我的数据库已填充,我通过以下方式拨打电话:

http://localhost:3000/templates?id=1

在节点中处理此端点的代码是:

app.get('/templates', authenticateToken, async (req, res) => {
  const templates = await db.survey_instances.findByPk(1);
  res.send(templates);
});

我是节点新手,所以错误可能很明显,但我看不到。如果有人帮助我,我将不胜感激。谢谢!

标签: javascriptnode.jsrestexpresssequelize.js

解决方案


我弄清楚了这个问题。新的 Sequelize 更新中存在一个错误,无法使该underscored: true选项起作用。更多细节可以在这里找到。

所以我现在只使用骆驼箱而不是蛇箱。现在一切正常。


推荐阅读