如何使用baucis在POST请求后插入mongo id

时间:2014-12-05 10:01:44

标签: node.js mongodb express mongoose baucis

我正在使用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?

谢谢!

2 个答案:

答案 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();
});