我正在使用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之后添加另一个快速中间件,只处理工作组的post:
app.post('/api/workgroups', workgroupPermissionUpdater.update.bind(workgroupPermissionUpdater));当调用workgroupPermissionUpdater.update时,我希望在res参数中找到创建的工作组的mongo id (每个中间件接收req、res和next作为参数),但它不在那里。
有人知道我如何获得创建的工作组的id吗?
谢谢!
发布于 2015-02-26 11:47:13
我对此进行了一些研究,并尝试了一些使用目前的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’,'update',...
发布于 2015-03-08 00:14:40
正如@Andrea_C提到的那样,使用mongoose中间件看起来是最好的解决方案。
您还可以使用传出流,这在某些情况下会更好:
controller.request('post', function (request, response, next) {
  request.baucis.outgoing(function (context, callback) {
    // do something with context.doc.id
    callback(null, context);
  });
  next();
});https://stackoverflow.com/questions/27313282
复制相似问题