【问题标题】:EmberJS: Throw 404 from route model hook when store query results in empty collectionEmberJS:当存储查询导致空集合时,从路由模型挂钩中抛出 404
【发布时间】:2017-05-02 22:24:50
【问题描述】:

我有一个 Ember 项目 (v2.12.0),我想通过它的 slug 找到某个模型。这些蛞蝓应该是独一无二的。

但是,当我使用 Ember.store.query() 查询记录时,返回的承诺总是根据 query() 的性质和 JSON API 规范解析为集合。

当服务器没有找到包含该特定 slug 的记录时,响应仍然是 200 OK,其负载为 my-model[] 的空集合。

我的问题是:

我怎样才能最好地在我的 ember 路由的 model() 挂钩中断言该集合恰好包含 1 个项目,或者中止并转换到 404 路由/页面?

这是我目前的代码:

import Ember from 'ember';

export default Ember.Route.extend({

model(params) {

    return this.store.query('my-model', {
        filter: {
            slug: params.myModelSlug
        }
    }).then((modelCollection) => {

        // Code below fails when modelCollection is empty...
        return modelCollection.get('firstObject');

        if (modelCollection.get('length') === 0) {
            // Throw new Ember Error 404?
        }
    });
}
});

【问题讨论】:

    标签: ember.js json-api


    【解决方案1】:

    在你的路线中你不应该做任何事情!那是适配器的工作! 不要忘记queryRecord。这就是你应该从你的路线调用的方法。适配器中的其余部分要好得多。

    但是,您可以在路线中执行此操作。重要的是要了解error substates。只需throw "foo",或实现您自己的错误对象。接下来显示错误子状态的 404 消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多