2013-02-25 71 views
0

我想創建一個快速路由來創建一個將其查詢參數傳遞給Mongoose查詢的RESTful url。像這樣(不工作)的代碼映射URL的限制和排序參數,否則使用默認值。該網址是:如何將Mongoose/MongoDB查詢作爲快速路由公開

爲myhost /工藝極限= 20 &排序=修飾

exports.find = function(req, res) { 

var options = { 
    limit : 100, 
    sort: '-created' 
}; 

_(options).extend(req.query); 

Process.find(options, function(err, process) { 
    res.send(process); 
}); 

} 

我只知道如何查詢參數傳遞給像查找單個方法()和sort()沒有以更自動的方式映射這一點。或者,我正在嘗試用RESTful API做一個壞主意?我正在使用Mongoose,但是如果有幫助,我會對使用本機驅動程序的解決方案感興趣。

回答

1

假設你正在使用下劃線庫的extend你可以做這樣的:

exports.find = function(req, res) { 

    var options = { 
    limit : 100, 
    sort: {created: -1} 
    }; 
    _.extend(options, req.query); 

    Process.find({}, null, options, function(err, process) { 
    res.send(process); 
    }); 
} 

options參數將被傳遞到Query#setOptions方法,很多的選項傳遞通過直接向節點.js本地驅動程序,因此對於像sort這樣的內容,請參閱本機find docs。如您所見,sort的格式不利於在URL參數中提供。

它只是暴露對特定選項的支持,然後單獨從req.query中單獨提取,而不是使用extend,但這兩種方法都可以工作,這樣更安全。

+0

真的嗎?我試過了,這些選項似乎對查詢沒有任何影響。我試圖找到關於此的文檔,但無法找到它。你能指點我嗎? – 2013-02-25 19:50:10

+0

@ 0x80它確實有效,但您必須使用正確格式的選項數據,這通常是本機格式,而不是貓鼬格式。查看更新的答案。 – JohnnyHK 2013-02-25 21:35:05

+0

感謝它的工作! – 2013-02-26 15:16:03