aurelia路由参数验证

时间:2017-05-14 15:03:57

标签: aurelia aurelia-router

我想知道如何最好地处理两种类型的坏路线。

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

对于类型检查是处理此问题的最佳方法,只需在订单模块的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');
}

2 个答案:

答案 0 :(得分: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');
        })
    );
}

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

答案 1 :(得分:0)

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

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