【问题标题】:aurelia routing parameter validationaurelia 路由参数验证
【发布时间】:2017-06-02 23:55:11
【问题描述】:

我试图弄清楚如何最好地处理两种不良路线。

  • 一个是类型检查。因为我知道我的 ID 应该是一个数值
  • 二是他们输入了错误的订单号

对于类型检查来说,最好的处理方法是在 order 模块的 activate 方法中简单地检查 javascript 并在失败时重定向到未找到的模块?或者是否有一些 aurelia 技巧来强制它成为未知路线或其他东西......

如果我对订单进行提取并且它没有返回任何结果,我是否也只是重定向了错误的订单号?

基本上只是想知道这是最佳做法还是有更好的方法来处理这个问题?

configureRouter(config: RouterConfiguration, router: Router) {
    config.title = 'My Aurelia APP';
    config.map([
        { route: ['', "orders"], name: 'orders', moduleId: 'orders', nav: true, title: 'List Of Cool Stuff' },
        { route: ':id', moduleId: 'order', name: 'Order Info' }]);
    this.router = router;

    config.mapUnknownRoutes('not-found');
}

【问题讨论】:

  • 如果您确定订单不可用,则显示一个 aurelia-dialog 实例,表示找不到订单,而不是重定向如何。单击确定后,只需拒绝承诺,aurelia 就会将用户重定向到上一个路由。
  • 我认为,正如您已经提到的,这应该在您的 order ViewModel 中进行管理 - 而不是在路由器中查询订单号,这不是它的设计目的。

标签: aurelia


【解决方案1】:

订单号的检查应作为视图模型代码的一部分进行。我假设在它到达服务器之前你不会知道订单号是否有效。所以就像你说的,在订单视图模型中激活:

activate(params) {
    let orderId = params.id;
    return this.serverClient.get("api/orders", orderId).then(data => 
        {
           //do order module code
        }).fail(error => 
        {
            this.router.navigate('unknown-error-route');
        })
    );
}

我的猜测是,如果订单属于网站上的其他用户,您不希望该用户访问他们的信息。所以我会在服务器端抛出一个安全异常或其他任何东西,然后在客户端总是重定向到未知的错误路由或其他东西,所以恶意的人不知道它是否失败,因为订单存在并且属于其他人或者订单根本不存在。或者你可以导航回来或其他什么。

【讨论】:

    【解决方案2】:

    我会在请求之前验证订单号是否为数字。这将节省一次往返,并且可以在 UI 上显示它是无效的。您还可以检查范围以确保它是有效范围。

    验证可以在输入和发送 API 请求之前进行。

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2019-03-02
      相关资源
      最近更新 更多