Skip to content

Commit 3230b10

Browse files
authored
fix(inboxQuery): use super _createRequest to prevent URI too long (#514)
1 parent 0b47015 commit 3230b10

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

src/query.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const _ = require('underscore');
22
const debug = require('debug')('leancloud:query');
33
const Promise = require('./promise');
44
const AVError = require('./error');
5-
const { _request } = require('./request');
5+
const { _request, request } = require('./request');
66
const { ensureArray, transformFetchOptions } = require('./utils');
77

88
const requires = (value, message) => {
@@ -249,27 +249,36 @@ module.exports = function(AV) {
249249
}
250250
return obj;
251251
},
252-
_createRequest(params = this.toJSON(), options) {
253-
if (JSON.stringify(params).length > 2000) {
252+
_createRequest(params = this.toJSON(), options, path = `/classes/${this.className}`) {
253+
if (encodeURIComponent(JSON.stringify(params)).length > 2000) {
254254
const body = {
255255
requests: [{
256256
method: 'GET',
257-
path: `/1.1/classes/${this.className}`,
257+
path: `/1.1${path}`,
258258
params,
259259
}],
260260
};
261-
return _request('batch', null, null, 'POST', body, options)
262-
.then(response => {
263-
const result = response[0];
264-
if (result.success) {
265-
return result.success;
266-
}
267-
const error = new Error(result.error.error || 'Unknown batch error');
268-
error.code = result.error.code;
269-
throw error;
270-
});
261+
return request({
262+
path: '/batch',
263+
method: 'POST',
264+
data: body,
265+
authOptions: options,
266+
}).then(response => {
267+
const result = response[0];
268+
if (result.success) {
269+
return result.success;
270+
}
271+
const error = new Error(result.error.error || 'Unknown batch error');
272+
error.code = result.error.code;
273+
throw error;
274+
});
271275
}
272-
return _request('classes', this.className, null, "GET", params, options);
276+
return request({
277+
method: 'GET',
278+
path,
279+
query: params,
280+
authOptions: options,
281+
});
273282
},
274283

275284
_parseResponse(response) {

src/status.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,8 @@ module.exports = function(AV) {
313313
_newObject: function(){
314314
return new AV.Status();
315315
},
316-
_createRequest: function(params, options){
317-
return AVRequest('subscribe/statuses', null, null, 'GET',
318-
params || this.toJSON(), options);
316+
_createRequest: function(params, options) {
317+
return AV.InboxQuery.__super__._createRequest.call(this, params, options, '/subscribe/statuses');
319318
},
320319

321320

test/status.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ describe("AV.Status",function(){
6060
expect(response.unread).to.be.eql(0);
6161
});
6262
});
63+
it('should not cause URI too long', () => {
64+
return AV.Status.inboxQuery(user)
65+
.containsAll('arr', new Array(50).fill(AV.Object.createWithoutData('Todo', '5850f138128fe1006978f766')))
66+
.find();
67+
});
68+
6369
});
6470

6571
describe("Status guide test.", function(){

0 commit comments

Comments
 (0)