Почему временные метки Sequelize не выключаются - PullRequest
0 голосов
/ 17 марта 2020

Кажется, я не понимаю, почему мои временные метки Sequelize не выключаются, несмотря на то, что они следуют примечаниям к документации. Я попытался установить это в определении модели и в определении Sequelize, чтобы его база данных была широкой.

Я пытаюсь выполнить запрос findAll, и у меня появляется эта ошибка:

Executing (default): SELECT 1+1 AS result
Database connection has been established successfully.
Executing (default): SELECT "contact_id", "first_name", 
"last_name","contact_type_id", "org_name", "created_at", 
"updated_at", "createdAt","updatedAt" FROM "contacts" AS 
"contacts";

Unhandled rejection SequelizeDatabaseError: 
column "createdAt" does not exist

Конечно он не существует, я пытаюсь его отключить.

В любом случае, вот мое определение модели и определение Sequelize:

contact. js

const Sequelize = require('sequelize');
var Model = Sequelize.Model;

module.exports = (sequelize, DataTypes) => {
  const Contact = sequelize.define('contacts', {
    contact_id: {
      type: Sequelize.INTEGER,
      field: 'contact_id',
      primaryKey: 'true'
    },
    first_name: {
      type: Sequelize.STRING,
      field: 'first_name'
    },
[...] //condensed for legibility
    created_at: {
      type: Sequelize.DATE,
      field: 'created_at'
    },
    updated_at: {
      type: Sequelize.DATE,
      field: 'updated_at'   
    }
  },
  {
  // Options
  tableName: 'contacts',
  timestamps: 'false'
  }
  );

  return Contact;

};

models \ index. js

var fs        = require('fs');
var path      = require('path');
var Sequelize = require('sequelize');
var basename  = path.basename(__filename);
var db        = {};

const sequelize = new Sequelize(process.env.DB, process.env.DB_USER,
process.env.DB_PASS, {
  host: xxxxxxxx,
  dialect: 'postgres',
  protocol: 'postgres',
  freezeTableName: 'true'
});

[...] // condensed for legibility

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

Любое понимание может кто-нибудь предоставить? Я уже несколько раз перезагружал сервер - и бэкэнд, и внешний интерфейс.

1 Ответ

1 голос
/ 17 марта 2020

timestamps значение должно быть логического типа, а не строкового типа. Посмотрите это документы

  /**
   * Adds createdAt and updatedAt timestamps to the model. Default true.
   */
  timestamps?: boolean;

Например

/* eslint-disable @typescript-eslint/camelcase */
import { sequelize } from '../../db';
import Sequelize, { Model } from 'sequelize';

class Contact extends Model {}
Contact.init(
  {
    contact_id: {
      type: Sequelize.INTEGER,
      field: 'contact_id',
      primaryKey: true,
    },
    first_name: {
      type: Sequelize.STRING,
      field: 'first_name',
    },
    created_at: {
      type: Sequelize.DATE,
      field: 'created_at',
    },
    updated_at: {
      type: Sequelize.DATE,
      field: 'updated_at',
    },
  },
  { sequelize, modelName: 'contacts', timestamps: false },
);

(async function test() {
  try {
    await sequelize.sync({ force: true });
    await Contact.findAll();
  } catch (error) {
    console.log(error);
  } finally {
    await sequelize.close();
  }
})();

Результаты выполнения:

Executing (default): DROP TABLE IF EXISTS "contacts" CASCADE;
Executing (default): DROP TABLE IF EXISTS "contacts" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "contacts" ("contact_id" INTEGER , "first_name" VARCHAR(255), "created_at" TIMESTAMP WITH TIME ZONE, "updated_at" TIMESTAMP WITH TIME ZONE, PRIMARY KEY ("contact_id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'contacts' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
Executing (default): SELECT "contact_id", "first_name", "created_at", "updated_at" FROM "contacts" AS "contacts";

Как видите, нет createdAt и updatedAt столбцов больше.

...