паруса-монго созданы на дату не правильно - PullRequest
0 голосов
/ 05 февраля 2019

Я использую паруса 0.12.0 с sails-mongo 0.12.3.Я перенял существующее приложение у «внешних» разработчиков.

Я заметил, что дата «createAt» в настоящее время во всех коллекциях mongo неверна, тогда как дата updatedAt верна.Дата createAt должна автоматически сгенерироваться как сегодняшняя дата и время создания документа, однако, по-видимому, для нее задана некоторая дата в прошлом.Дата обновленной даты, по-видимому, имеет правильное значение для сегодняшней даты.

Пример:

"createdAt" : ISODate("2017-09-25T18:39:49.409Z"), "updatedAt" : ISODate("2017-09-25T18:39:59.021Z")

Как решить эту проблему?Я заметил, что файлы в каталоге "models" все пусты, поэтому, похоже, это не проблема модели, поскольку явных моделей не существует.

Пример:

module.exports = {
  attributes: {

  }
};

Я пыталсяявно установить дату создания в одном из файлов модели (как было предложено в аналогичных вопросах), однако это не сработало.

Пример:

  attributes: {
    createdAt: {
      type: 'datetime',
      defaultsTo: function() {return new Date();}
    }
  },

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете попытаться определить себя как созданный.

В вашей отдельной модели (api/models) вам не нужно писать что-либо, связанное с созданным или обновленным.

// api/models/SomeModel.js
module.exports = {
  attributes: {
    // createdAt: { type:'string' },  -> coment it out, or remove at all from here.
  }
};

добавитьэто к вашему config/models.js

// config/models.js

module.exports.models = {
  migrate: 'safe',
  attributes: {
    createdAt: { type: 'string' },
    updatedAt: { type: 'string' },
    id: { type: 'string', columnName: '_id' }
  },

  beforeUpdate: function(values, next) {
    if(!values.updatedAt) values.updatedAt = new Date().toISOString();
    // this is my feature i am using if i want to explicity not trigger updatedAt.
    else if(values.updatedAt == 'no_update') delete values.updatedAt;
    else values.updatedAt = new Date(values.updatedAt).toISOString();
    next();
  },

  beforeCreate: function(values, next) {
    if(!values.updatedAt) values.updatedAt = new Date().toISOString();
    else values.updatedAt = new Date(values.updatedAt).toISOString();
    if(!values.createdAt) values.createdAt = new Date().toISOString();
    else values.createdAt = new Date(values.createdAt).toISOString();
    next();
  },
}
...