Skip to content

Commit 38a6fd0

Browse files
committed
Merge pull request #274 from leeyeh/fix-api-redirect
refactor(ajax): replace ajax.js with superagent to follow redirection
2 parents 710d488 + 3779c2c commit 38a6fd0

File tree

13 files changed

+162
-242
lines changed

13 files changed

+162
-242
lines changed

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ JavaScript SDK for [LeanCloud](http://leancloud.cn/).
3434
│ └── ...
3535
├── gulpfile.js
3636
├── src
37-
│ ├── av-browser.js // 浏览器环境入口文件,将会被 browserify 编译
38-
│ ├── av-browser-core.js // 浏览器环境入口文件,只包含核心依赖,将会被 browserify 编译
3937
│ ├── av.js // node.js 环境入口文件
4038
│ ├── browserify-wrapper // 目录中为针对 node.js 与浏览器环境之间差异的不同实现
4139
│ └── ...

gulpfile.babel.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ gulp.task('clean-dist', () => {
6161
});
6262

6363
gulp.task('browserify', ['clean-dist'], () => {
64-
const bundle = browserify({entries: './src/av-browser.js'});
64+
const bundle = browserify({
65+
entries: './src/av.js',
66+
standalone: 'AV'
67+
});
6568
return bundle.bundle()
6669
.pipe(source('av-es6.js'))
6770
.pipe(gulp.dest('dist'));

package.json

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@
1111
"test": "gulp test"
1212
},
1313
"dependencies": {
14-
"form-data": "^1.0.0-rc4",
14+
"debug": "^2.2.0",
1515
"localstorage-memory": "^1.0.1",
1616
"md5": "^2.0.0",
1717
"qiniu": "6.1.3",
18+
"superagent": "^2.0.0-alpha.2",
1819
"underscore": "^1.8.3"
1920
},
2021
"devDependencies": {
2122
"babel-core": "^6.4.0",
2223
"babel-preset-es2015": "^6.3.13",
2324
"browser-sync": "^2.2.1",
2425
"browserify": "^11.0.1",
25-
"debug": "^2.1.1",
2626
"expect.js": "0.2.0",
2727
"gulp": "^3.8.10",
2828
"gulp-babel": "^6.1.1",
@@ -49,16 +49,12 @@
4949
},
5050
"browser": {
5151
"react-native": false,
52-
"./src/browserify-wrapper/ajax.js": "./src/browserify-wrapper/ajax-browser.js",
5352
"./src/uploader/qiniu.js": "./src/uploader/qiniu-browser.js",
5453
"./src/browserify-wrapper/localStorage.js": "./src/browserify-wrapper/localstorage-browser.js",
5554
"./src/browserify-wrapper/parse-base64.js": "./src/browserify-wrapper/parse-base64-browser.js",
56-
"./src/uploader/cos.js": "./src/uploader/cos-browser.js",
57-
"./dist/node/browserify-wrapper/ajax.js": "./dist/node/browserify-wrapper/ajax-browser.js",
5855
"./dist/node/uploader/qiniu.js": "./dist/node/uploader/qiniu-browser.js",
5956
"./dist/node/browserify-wrapper/localStorage.js": "./dist/node/browserify-wrapper/localstorage-browser.js",
60-
"./dist/node/browserify-wrapper/parse-base64.js": "./dist/node/browserify-wrapper/parse-base64-browser.js",
61-
"./dist/node/uploader/cos.js": "./dist/node/uploader/cos-browser.js"
57+
"./dist/node/browserify-wrapper/parse-base64.js": "./dist/node/browserify-wrapper/parse-base64-browser.js"
6258
},
6359
"eslintConfig": {
6460
"env": {

src/ajax.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* 每位工程师都有保持代码优雅的义务
3+
* Each engineer has a duty to keep the code elegant
4+
**/
5+
6+
'use strict';
7+
8+
const request = require('superagent');
9+
const debug = require('debug')('ajax');
10+
11+
const Promise = require('./promise');
12+
13+
module.exports = function _ajax(method, resourceUrl, data, headers = {}, onprogress) {
14+
debug(method, resourceUrl, data, headers);
15+
16+
var promise = new Promise();
17+
18+
const req = request(method, resourceUrl)
19+
.set(headers)
20+
.send(data)
21+
.end((err, res) => {
22+
if (res) {
23+
debug(res.status, res.body, res.text);
24+
}
25+
if (err) {
26+
if (res) {
27+
err.statusCode = res.status;
28+
err.responseText = res.text;
29+
err.response = res.body;
30+
}
31+
return promise.reject(err);
32+
}
33+
promise.resolve(res.body, res.status, res);
34+
});
35+
if (onprogress) {
36+
req.on('progress', onprogress);
37+
}
38+
39+
return promise;
40+
};

src/av-browser.js

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/browserify-wrapper/ajax-browser.js

Lines changed: 0 additions & 60 deletions
This file was deleted.

src/browserify-wrapper/ajax.js

Lines changed: 0 additions & 69 deletions
This file was deleted.

src/uploader/cos-browser.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/uploader/cos.js

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
1+
/**
2+
* 每位工程师都有保持代码优雅的义务
3+
* Each engineer has a duty to keep the code elegant
4+
**/
5+
16
'use strict';
2-
const FormData = require('form-data');
37

4-
const ajax = require('../browserify-wrapper/ajax.js');
8+
const request = require('superagent');
59
const Promise = require('../promise');
6-
const debug = require('debug')('cos');
710

8-
module.exports =function upload(uploadInfo, data, file) {
11+
module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
912
file.attributes.url = uploadInfo.url;
1013
file._bucket = uploadInfo.bucket;
1114
file.id = uploadInfo.objectId;
12-
const uploadUrl = uploadInfo.upload_url;
13-
const body = new Buffer(data, 'base64');
14-
debug(uploadUrl, data);
15-
const formData = new FormData();
16-
formData.append('fileContent', body);
17-
formData.append('op', 'upload');
15+
const uploadUrl = uploadInfo.upload_url + "?sign=" + encodeURIComponent(uploadInfo.token);
1816

1917
const promise = new Promise();
2018

21-
const request = formData.submit(uploadUrl, function(err, res) {
22-
debug(err, res.statusCode);
23-
if (err) {
24-
promise.reject(err);
25-
} else {
19+
const req = request('POST', uploadUrl)
20+
.field('fileContent', data)
21+
.field('op', 'upload')
22+
.end((err, res) => {
23+
if (res) {
24+
debug(res.status, res.body, res.text);
25+
}
26+
if (err) {
27+
if (res) {
28+
err.statusCode = res.status;
29+
err.responseText = res.text;
30+
err.response = res.body;
31+
}
32+
return promise.reject(err);
33+
}
2634
promise.resolve(file);
27-
}
28-
});
29-
request.setHeader('Authorization', uploadInfo.token);
35+
});
36+
if (saveOptions.onprogress) {
37+
req.on('progress', saveOptions.onprogress);
38+
}
3039
return promise;
3140
};

src/uploader/qiniu-browser.js

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,39 @@
55

66
'use strict';
77

8-
const ajax = require('../browserify-wrapper/ajax.js');
8+
const request = require('superagent');
9+
const Promise = require('../promise');
910

10-
module.exports = function upload(uploadInfo, data, file, saveOptions) {
11-
file.attributes.url = uploadInfo.url;
12-
file._bucket = uploadInfo.bucket;
13-
file.id = uploadInfo.objectId;
14-
//Get the uptoken to upload files to qiniu.
15-
const uptoken = uploadInfo.token;
16-
const formData = new FormData();
17-
formData.append('file', data);
18-
formData.append('name', file.attributes.name);
19-
formData.append('key', file._qiniu_key);
20-
formData.append('token', uptoken);
11+
module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
12+
file.attributes.url = uploadInfo.url;
13+
file._bucket = uploadInfo.bucket;
14+
file.id = uploadInfo.objectId;
15+
//Get the uptoken to upload files to qiniu.
16+
const uptoken = uploadInfo.token;
2117

22-
return ajax('POST', 'https://up.qbox.me', formData, undefined, saveOptions.onProgress)
23-
.then(() => file);
18+
const promise = new Promise();
19+
20+
const req = request('POST', 'https://up.qbox.me')
21+
.field('file', data)
22+
.field('name', file.attributes.name)
23+
.field('key', file._qiniu_key)
24+
.field('token', uptoken)
25+
.end((err, res) => {
26+
if (res) {
27+
debug(res.status, res.body, res.text);
28+
}
29+
if (err) {
30+
if (res) {
31+
err.statusCode = res.status;
32+
err.responseText = res.text;
33+
err.response = res.body;
34+
}
35+
return promise.reject(err);
36+
}
37+
promise.resolve(file);
38+
});
39+
if (saveOptions.onprogress) {
40+
req.on('progress', saveOptions.onprogress);
41+
}
42+
return promise;
2443
};

0 commit comments

Comments
 (0)