2016-08-21 108 views
0

我保存文件API代码看起来像错误响应

save(category) { 
     category.save().then(() => { 
      this.transitionTo('categories'); 
     }).catch((adapterError) => { 
      console.log(category.get('errors').toArray()); 
      console.log(category.get('isValid')); 
     }); 
    }, 

当API的答案是:

{"errors":[{"attribute":"name","message":"This value should not be blank."}]}

然后

category.get('isValid')

仍然返回true 。

我的问题是,验证错误应该如何看起来像?

+0

什么是保存对象时来自开发者控制台的请求的标题吗? – DanGar

+0

之前我有200,但现在改为400,结果是一样的。 –

+0

错误处理取决于您的ember-data适配器。你使用哪个适配器? – Engwan

回答

1

默认情况下,当状态码为422时,默认情况下,ember-data的适配器确定响应无效。您可以覆盖适配器的isInvalid函数以更改此设置。

另外,ember-data现在希望将错误格式化为json-api错误对象。如果您的后端没有以这种格式返回它,您可以通过重写适配器的handleResponse函数来将其转换为ember。

这是一个示例JSON-API错误:

{"errors": [ 
    { 
    "detail": "Must be unique", 
    "source": { pointer: "/data/attributes/title"} 
    }, 
    { 
    "detail": "Must not be blank", 
    "source": { pointer: "/data/attributes/content"} 
    } 
]} 

如果你回到你上述错误的反应,你会做这样的事情在你的适配器:

handleResponse(status, headers, payload) {                                                
    if (status === 422 && payload.errors) {                                                 
    let jsonApiErrors = [];                                                    

    for (let key in payload.errors) {                                                  
     for (let i = 0; i < payload.errors[key].length; i++) {                                            
     jsonApiErrors.push({                                                    
      detail: payload.errors[key][i],                                                 
      source: {                                                      
      pointer: `data/attributes/${key}`                                                
      }                                                        
     });                                                        
     }                                                         
    }                                                          

    return new DS.InvalidError(jsonApiErrors);                                               
    } else {                                                        
    return this._super(...arguments);                                                  
    }                                                          
}