我试图获取一个datetime并在我的mongoose模式中使用它,只是因为服务器返回了错误的时区,即使我更改了Heroku上的设置。 我试图通过使用axios请求来设置模式上的默认日期。 但它不起作用,因为它是一个承诺。 有没有什么办法能把这个值提取出来? 我到处都找过了,但他们都用回调,但我不认为我在这里能做到这一点。
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;
})
}
}
});
任何帮助都将不胜感激,谢谢。
我不认为模型/模式可以是异步的,但是由于您需要异步默认值,您可以尝试如下所示:
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);