我有這個到目前爲止。它的工作原理,但我不禁想知道是否有一些少點哈希。我應該如何發送GET請求到koa後端,它將返回條件結果?
GET請求:
http://localhost:3100/api/things?matches=%7B%22name%22%3A%22asdf%22%7D
解碼:matches={"name":"asdf"}
- 我基本上採取了數據對象的GET請求,使鍵查詢字符串參數名稱和JSON.stringify
值作爲查詢字符串值。
工程....但是我覺得也許我能做到這一點與端點像平滑:
GET http://localhost:3100/api/things/match/:attr/:value
- 但是它是非常有限的,因爲我只能有一個條件。雖然通過上面的整個對象我可以匹配多個屬性。
對事物的興亞方面,它沒有太多額外的代碼(我使用Thinky中的RethinkDB):
/**
* list
* list all things
* @param next
*/
ctrl.list = function *(next){
var matches = this.request.query.matches && JSON.parse(this.request.query.matches);
if (matches) {
var result = yield Thing.orderBy({index: "createdAt"}).filter(function(doc){
return doc('name').match(matches.name);
});
} else {
var result = yield Thing.orderBy({index: "createdAt"});
}
this.body = result;
yield next;
};
如果沒有查詢字符串,那麼它只是返回所有結果。
我在正確的軌道上嗎?
我不太瞭解koa,只是對你選擇的端點發表評論:如果你使用'/:attr /:value',你不會傳遞多個查詢條件:'../matches/name/asdf/color/red/prop/value ...'?似乎很尷尬。將它們解析爲查詢字符串不是更好嗎? '../ matches?name = asdf&color = red&prop = val' – laggingreflex
使用查詢字符串方法的想法是我可以有多個過濾器對象像'matches = {name:'asdf'}&where = {age:18}'etc等 – chovy
看來,雖然哈克,你的解決方案可能是最靈活的。你只是想在你的模型上有一個HTTP層,還是將接口限制得更多? –