【发布时间】:2019-06-15 07:43:55
【问题描述】:
之前有人问过几个类似的问题,但我无法找到任何适用于此用例的解决方案。
我正在尝试编写一个预提交挂钩,每次保存新的“记录”文档时都会生成一个自动递增的 ID 号。
自动增量 ID 的创建正在运行。我可以通过检查 console.log 来验证这一点。
问题是没有在保存的文档上设置 RecordID。文档使用在 save() 调用中设置的正确值保存,但不是在预保存挂钩中设置的 RecordID。
记录模型
async function getNextSequence(name) {
let seq, result;
try {
result = await counters.findOneAndUpdate({
_id: name
}, {
// Increment sequence by 1
$inc: { seq: 1 }
});
}
catch (error) {
console.error(`getNextSequence failed ${error}`);
}
return result.seq;
}
// Pre save hook
RecordsSchema.pre('save', (next) => {
// Get document being saved
let record = this;
// Get next RecordID auto increment number
getNextSequence('RecordID').then(nextID => {
// Set RecordID
if (nextID) {
record.RecordID = nextID;
}
// nextID is showing up correctly
// record object also shows up correctly in the log,
// but it does NOT show up in the database
console.log(`RecordsSchema.pre ${nextID} ${JSON.stringify(record)}`);
next();
}).catch((error) => {
console.error(`getNextSequence failed ${error}`);
});
});
记录 save() 调用
router.post('/', (req, res, next) => {
let record = new records();
record.Title = req.body.Title;
record.Location = req.body.Location;
record.save().then(record => {
res.status(200).json(record);
}).catch((error) => {
console.log(`${origin} ${error}`);
res.status(500).send('Server error');
});
});
结果
记录标题和位置正在正确保存。但是,没有保存 RecordID。我也尝试过使用 post save hook,但同样的问题正在发生。
RecordsSchema.post('save', (doc) => {
// Get document being saved
let record = doc;
// Get next RecordID auto increment number
getNextSequence('RecordID').then(nextID => {
// Set RecordID
if (nextID) {
record.set( { RecordID: nextID } );
}
console.log(`RecordsSchema.post ${nextID} ${JSON.stringify(record)}`);
//next();
}).catch((error) => {
console.error(`getNextSequence failed ${error}`);
});
});
【问题讨论】: