在 dstore/Rest 请求中添加查询参数

Add query parameters at dstore/Rest request

我有一个这样的 dstore/Rest 实例:

const entries = new Rest({ target: '/rest/entries' })

而且我需要为每个 PUT/POST 请求添加一个令牌作为查询参数,因此 url 对于我的 PUT/POST 请求应该如下所示:

'/rest/entries/100500?token=some_token'

dstore/Rest 有什么方便的方法吗?或者在每个请求之前设置 header 并将令牌放在那里。无论如何,我的问题是在调用

时构建正确的请求
entries.add({id: 100500, value: 'someValue'})

更新:

我发现,Rest.add 接受两个参数 - object 和选项,并设法在 headers 中添加令牌:

entries.add(entry, {
            headers: {
                Token: token
            }
        })

不过我还是对查询参数很好奇。

我认为继承 dstore/Rest ,通过创建自定义 MyRest.js class 并在构造函数中添加 headers 将帮助您在 constrictor 中传递令牌,然后执行操作无需每次都使用 headers。

你的新 class 应该看起来像:

define([
    'dojo/_base/declare',
    'dstore/Rest',
    'dojo/_base/lang',
], function (declare, Rest) {

    return declare(Rest, {
 //                  ^
 //                  |
 // inheritence -----
        constructor: function(headers) {  // headers object : {Token: token};
            this.inherited(arguments); // like super() in poo
            this.headers = this.headers || {};
            lang.mixin(this.headers, headers || {});
        }
    });
});

我已经找到了以下解决方案:

lang.extend(Rest, {
    setToken: function(token) {
        this.token = token

        aspect.after(this, '_getTarget', function(target) {
            if (this.token) {
                target += '?token=' + this.token
                this.token = undefined
            }
            return target
        })


        aspect.before(this, 'add', function() {
            if (this.token) {
                this.target += '?token=' + this.token
                this.token = undefined
            }
        })

        return this
    }
})

我是这样使用的:

entries.setToken(token).add(data)

但我不确定这是完成任务的好方法。