Как использовать асинхронное значение по умолчанию в схеме mon goose? - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь получить дату и время и использовать его в моей схеме mon goose только потому, что сервер возвращает неправильный часовой пояс, хотя я изменил настройки на heroku. Я пытаюсь установить дату по умолчанию в схеме, используя запрос ax ios. Но это не работает, потому что это обещание. Есть ли способ каким-то образом извлечь ценность? Я везде искал, но все они используют обратные вызовы, но я не думаю, что смогу сделать это здесь.

var pricesSchema = mongoose.Schema({
  USD_LOWEST: {
    type: Number,
    required: true
  },
  USD_LOW: {
    type: Number,
    required: true
  },
  USD_HIGH: {
    type: Number,
    required: true
  },
  USD_HIGHEST: {
    type: Number,
    required: true
  },
  USD_CBA: {
    type: Number,
    required: true
  },
  BTC_PRICE: {
    type: Number,
    required: true
  },
  date: {
    type: String,
    default : function(){
      axios.get('http://worldtimeapi.org/api/timezone/Asia/Yerevan').then(data=>{
        return data.datetime;
      })
    }
  }
});

Любая помощь будет очень признательна, спасибо.

1 Ответ

1 голос
/ 12 июля 2020

Я не думаю, что модели / схемы могут быть асинхронными c, но, поскольку вам нужно асинхронное значение по умолчанию, вы можете попробовать следующее:

const pricesSchema = mongoose.Schema({
  USD_LOWEST: {
    type: Number,
    required: true,
  },
  USD_LOW: {
    type: Number,
    required: true,
  },
  USD_HIGH: {
    type: Number,
    required: true,
  },
  USD_HIGHEST: {
    type: Number,
    required: true,
  },
  USD_CBA: {
    type: Number,
    required: true,
  },
  BTC_PRICE: {
    type: Number,
    required: true,
  },
  date: {
    type: Date,
    expires: 60 * 60 * 24 * 7,
  },
});


pricesSchema.pre('save', async function () {
  if (!this.date) {
    const response = await axios.get('http://worldtimeapi.org/api/timezone/Asia/Yerevan');
    this.date = response.data.datetime;
  }
});

export const Price = mongoose.model('Prices', pricesSchema);
...