2015-10-04 71 views
0

我正在使用koa路由器來定義一個REST api。最佳實踐koa路由響應的好和不好

我有一個途徑,允許客戶端補丁數據,爲了這個,我希望只用響應: -

OK - 發生錯誤 - 沒有錯誤

NOT OK修補數據。

router.patch('/api/data', function *(next) { 
    if (_.has(this.query, 'id')) { 
     // do data patch 
     this.status = 200; 
     this.body = yield {status: 200, body: 'OK'}; 
    } else { 
     this.status = 304; 
     this.body = yield {status: 304, body: 'expecting id}; 
    } 
}); 

有沒有比上面更標準的方法?

回答

1

不要產生一個簡單的對象。當一個或多個屬性通過可收回(promise,thunk,generator ...)賦值時,只產生一個對象。

考慮返回更新的項目,以防止需要額外的API調用。

this.throw()是我使用的。

router.patch('/api/data', function *(next) { 
    if (_.has(this.query, 'id')) { 
    this.status = 200; 
    // don't yield... 
    this.body = {status: 200, body: 'OK'}; 

    // consider returning the updated item to prevent the need to additional 
    // api calls 
    this.body = yield model.update(this.query.id, ...) 
    } else { 
    this.throw(304, 'expecting id', {custom: 'properties here'}); 
    } 
}); 
1

在@詹姆斯·摩爾的回答輕度改善,你也可以使用this.assert(expression, [status], [message])短路,如果早expression不是truthy的路線。

我已經轉換他們的代碼來演示:

router.patch('/api/data', function*(next) { 
    this.assert(_.has(this.query, 'id'), 304, JSON.stringify({ status: 304, body: 'expecting id' }))); 
    this.body = JSON.stringify({ status: 200, body: 'OK' }); 
});