是否可以一次转义多个路径中的所有参数?

时间:2019-05-30 07:39:28

标签: javascript backbone.js backbone-routing

我有一个具有多条路由的路由器。当前,我在方法本身中转义了将每个参数分别传递给该方法。

出于安全目的,我需要转义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

是否可以一次转义所有路由中的所有参数,这样我就不必在每个方法中都明确地转义它们?

1 个答案:

答案 0 :(得分:0)

您可以覆盖execute

  

execute router.execute(callback, args, name)   每当路由匹配并且其对应的回调将要执行时,在路由器内部都会调用此方法。从execute返回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);
  }
});