首页 > 解决方案 > 是否可以一次转义多条路由中的所有参数?

问题描述

我有一个有多个路由的路由器。目前,我正在转义方法本身中单独传递给方法的每个参数。

出于安全目的,我需要转义 URL 中传递的所有参数。

class MyRouter extends Backbone.Router
   routes:
     "student/:id/:name"         :        "student"
     "teacher/:tid/:tname"       :        "teacher"
     "teacher/:tid/:tname/share" :        "teacher_share"

  student: (id, name) ->
    id = _.escape(id)
    name = _.escape(name)
    #do stuff

  teacher: (tid, tname) ->
    tid = _.escape(tid)
    tname = _.escape(tname)
    #do stuff

  teacher_share: (tid, tname) ->
    tid = _.escape(tid)
    tname = _.escape(tname)
    #do stuff

是否可以一次转义所有路由中的所有参数,以便我不必在每个相应的方法中显式转义它们?

标签: javascriptbackbone.jsbackbone-routing

解决方案


您可以覆盖execute

execute router.execute(callback, args, name) 这个方法在路由器内部被调用,只要一个路由匹配并且它对应的回调即将被执行。从执行返回 false 以取消当前转换。覆盖它以执行自定义解析或路由包装,例如,在将查询字符串交给路由回调之前解析查询字符串,如下所示:

var Router = Backbone.Router.extend({
  execute: function(callback, args, name) {
    if (!loggedIn) {
      goToLogin();
      return false;
    }
    args.push(parseQueryString(args.pop()));
    if (callback) callback.apply(this, args);
  }
});

推荐阅读