#node.js #mongodb #mongoose
Вопрос:
Я создал статический метод для генерации токена для моего клиента. Для данного условия я обновляю тот же документ из статического метода, используя метод updateOne Мангуста.
const clientSchema = new Schema(
{
firstName: Schema.Types.String,
lastName: Schema.Types.String,
email: Schema.Types.String,
lastRequestAt: { type: Schema.Types.Date, default: new Date() },
},
{ timestamps: true },
);
Статический метод:
clientSchema.statics.findByToken = async function(token) {
let client = this;
let decoded;
let jwtSecret = config.jwt.secret;
let d = new Date();
let clientData;
try {
decoded = jwt.verify(token, jwtSecret);
clientData = await client.findOne({
_id: decoded._id,
});
if (
clientData.lastRequestAt amp;amp;
clientData.lastRequestAt.getTime() 3600 * 1000 >
d.getTime()
) {
await client.updateOne(
{
_id: decoded._id,
},
{ lastRequestAt: new Date() },
);
return clientData;
} else {
Logger.log.info('More days passed for the last request of the user');
return Promise.reject({
status: 'TOKEN_EXPIRED',
message: 'More days passed for the last request of the user',
});
}
} catch (e) {
console.log('Error in finding client by token', e.message || e);
return Promise.reject({ status: 'INVALID_TOKEN', message: 'Cannot decode token' });
}
};
Здесь lastRequestAt
должно обновиться. Это прекрасно работает на моем локальном компьютере, в то время как на сервере он не выдает никаких ошибок, но документ также не обновляется в базе данных.
Ниже приведены версии задействованного программного обеспечения/модулей на сервере:
MongoDB: 4.4.2 мангуст: 5.13.3 узел: 14.15.1 ОС: ubuntu 20.04
Комментарии:
1.Он возвращает меня
{ n: 1, nModified: 1, ok: 1 }
, но документ по-прежнему не обновляется. В рамках других альтернатив: — Я пытался{$set: { lastRequestAt: new Date() }}
, но это не сработало — В то время как для меня сработало следующее:c.lastRequestAt = new Date();
await c.save();