【问题标题】:Is it possible to escape all the parameters in multiple routes at once?是否可以一次转义多条路由中的所有参数?
【发布时间】:2019-10-15 20:20:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript backbone.js backbone-routing


    【解决方案1】:

    您可以覆盖execute

    executerouter.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);
      }
    });
    

    【讨论】:

    • 所以在我的情况下,我只需要对每个键执行 _.escape() 操作,而不是返回 false:args 的值?
    • 啊是的...登录只是示例。我猜你需要在args.push(parseQueryString(args.pop())); 之后做
    • 啊,是的...我想您可以删除登录内容并使用_.escape 而不是parseQueryString(args.pop());,这应该很好
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多