我正在使用express + baucis + mongoose为存储在mongodb中的模型制作基本的CRUD API。
var app = express();
mongoose.model('workgroup', WorkGroupSchema);
baucis.rest('workgroup');
app.use('/api', baucis());
var server = app.listen(4100);
到目前为止,这工作正常,我可以提出创建,更新和删除我的工作组的任何请求。
现在,当用户创建工作组时,我需要做更多的操作(更新工作组权限),为此,我需要获取最近创建的工作组的mongo id。
我尝试在baucis之后添加另一个快速中间件,只处理工作组的帖子:
app.post('/api/workgroups', workgroupPermissionUpdater.update.bind(workgroupPermissionUpdater));
当调用workgroupPermissionUpdater.update时,我希望在res param中找到创建的工作组的mongo id(每个中间件都接收req,res和next作为params),但它不存在。
任何人都知道如何获取创建的工作组的ID?
谢谢!
答案 0 :(得分:2)
我对此进行了一些研究,并尝试了现在使用baucis中间件的几个黑客,但是无法用它获得满意的解决方案(很高兴听到社区的反馈)。
我最终决定将baucis从图片中删除,并通过mongoose middleware提供此功能。
//WorkGroup.js file
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// other settings here
var WorkGroupSchema = new Schema({
name: String
});
module.exports = mongoose.model('WorkGroupSchema', WorkGroupSchema);
WorkGroupSchema.post('save', function (doc){
console.log("Do something with the WorkGroup " + doc.name + "just created " + doc.id);
});
您将可以访问新创建的模块实例的实例的所有其他属性。您也可以hook参加“新”,“更新”等活动,
答案 1 :(得分:1)
使用mongoose中间件作为@Andrea_C,这里看起来是最好的解决方案。
您还可以使用在某些情况下更好的传出流:
controller.request('post', function (request, response, next) {
request.baucis.outgoing(function (context, callback) {
// do something with context.doc.id
callback(null, context);
});
next();
});