2016-02-29 128 views
0

我爲我的REST API使用Koa和Mongoose。我的目標是用適當的狀態碼和錯誤信息進行迴應。但是,應用程序在ValidationError上兌現,電子郵件是必填字段,但未在此請求中提供。如何與其他一個狀態碼500多家驗證錯誤崩潰應用程序

router.post('/user/', function *() { 
    var user = new User(this.request.body); 
    yield user.save((error) => { 
     if (error) { 
     //Does not respond with a 404 
     this.status = 404; 
     } else { 
     this.status = 201; 
     this.response.body = user; 
     } 
    }) 
    }); 

回答

1

一個偉大的事情有關使用yield是,你可以使用try {} catch() {}就像你寫的代碼同步。

所以,你的代碼就變成了:

router.post('/user/', function *() { 
    var user = new User(this.request.body); 

    try { 
    yield user.save(); 
    } 
    catch (err) { 
    //Does not respond with a 404 
    this.status = 404; 
    } 

    this.status = 201; 
    this.response.body = user; 

});