2014-12-05 57 views
2

我正在使用express + baucis + mongoose爲存儲在mongodb中的模型製作基本的CRUD API。如何在POST請求後使用baucis獲取插入的mongo id

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創建工作組的蒙戈ID(每中間件接收req,res和next作爲params),但它不在那裏。

任何人都知道如何獲得創建的工作組的ID?

謝謝!

回答

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

使用貓鼬中間件作爲@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(); 
});