mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-02-01 15:23:03 +00:00
fix parse query error when pathname has encode chars
This commit is contained in:
parent
521c979eb2
commit
24c8db4b1c
@ -138,7 +138,9 @@ export default class extends EventEmitter {
|
||||
this.hostname = pos === -1 ? this.host : this.host.slice(0, pos);
|
||||
}else{
|
||||
let urlInfo = url.parse('//' + this.headers.host + this.req.url, true, true);
|
||||
let pathname = decodeURIComponent(urlInfo.pathname);
|
||||
//can not use decodeURIComponent, pathname may be has encode / chars
|
||||
//decodeURIComponent value after parse route
|
||||
let pathname = urlInfo.pathname;
|
||||
this.pathname = this.normalizePathname(pathname);
|
||||
this.query = urlInfo.query;
|
||||
this.hostname = urlInfo.hostname;
|
||||
|
||||
@ -13,7 +13,7 @@ export default class extends think.middleware.base {
|
||||
if (!think.RESOURCE_PATH || !this.config('resource_on') || !this.http.pathname) {
|
||||
return false;
|
||||
}
|
||||
let pathname = this.http.pathname;
|
||||
let pathname = decodeURIComponent(this.http.pathname);
|
||||
let reg = this.config('resource_reg');
|
||||
if (!reg.test(pathname)) {
|
||||
return false;
|
||||
|
||||
@ -167,7 +167,7 @@ export default class extends think.middleware.base {
|
||||
for(let i = 0, name, length = Math.ceil(paths.length) / 2; i < length; i++){
|
||||
name = paths[i * 2];
|
||||
if(name){
|
||||
this.http._get[name] = paths[i * 2 + 1] || '';
|
||||
this.http._get[name] = decodeURIComponent(paths[i * 2 + 1] || '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,6 +99,22 @@ describe('core/http.js', function() {
|
||||
think.config('timeout', 10);
|
||||
});
|
||||
|
||||
it('parse pathname', function(done) {
|
||||
var defaultHttp = getDefaultHttp('/index/index/name/w%2Fww');
|
||||
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
||||
instance.run().then(function(http) {
|
||||
assert.deepEqual(http.pathname, 'index/index/name/w%2Fww');
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('parse pathname 1', function(done) {
|
||||
var defaultHttp = getDefaultHttp('/index/w%2Fww');
|
||||
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
||||
instance.run().then(function(http) {
|
||||
assert.deepEqual(http.pathname, 'index/w%2Fww');
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('GET, query', function(done) {
|
||||
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&1');
|
||||
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
||||
|
||||
@ -448,6 +448,54 @@ describe('middleware/parse_route', function(){
|
||||
done();
|
||||
})
|
||||
})
|
||||
it('route_on on, has rules, has method, post, has extra pathname', function(done){
|
||||
muk(think, 'module', ['dddd'])
|
||||
muk(think, 'route', function(){
|
||||
return [
|
||||
[/^welefen/, {
|
||||
get: '/dddd/welefen/get',
|
||||
post: '/dddd/welefen/post'
|
||||
}]
|
||||
];
|
||||
})
|
||||
execMiddleware('parse_route', {
|
||||
route_on: true
|
||||
}, {
|
||||
pathname: 'welefen/name/suredy/value/2222',
|
||||
method: 'POST'
|
||||
}).then(function(http){
|
||||
assert.equal(http.module, 'dddd');
|
||||
assert.equal(http.controller, 'welefen');
|
||||
assert.equal(http.action, 'post');
|
||||
assert.deepEqual(http._get, { test: 'welefen', value: '2222', name: 'suredy' });
|
||||
muk.restore();
|
||||
done();
|
||||
})
|
||||
})
|
||||
it('route_on on, has rules, has method, post, has extra pathname, decode', function(done){
|
||||
muk(think, 'module', ['dddd'])
|
||||
muk(think, 'route', function(){
|
||||
return [
|
||||
[/^welefen/, {
|
||||
get: '/dddd/welefen/get',
|
||||
post: '/dddd/welefen/post'
|
||||
}]
|
||||
];
|
||||
})
|
||||
execMiddleware('parse_route', {
|
||||
route_on: true
|
||||
}, {
|
||||
pathname: 'welefen/name/suredy/value/w%2Fww',
|
||||
method: 'POST'
|
||||
}).then(function(http){
|
||||
assert.equal(http.module, 'dddd');
|
||||
assert.equal(http.controller, 'welefen');
|
||||
assert.equal(http.action, 'post');
|
||||
assert.deepEqual(http._get, { test: 'welefen', value: 'w/ww', name: 'suredy' });
|
||||
muk.restore();
|
||||
done();
|
||||
})
|
||||
})
|
||||
it('route_on on, has rules, has method, delete', function(done){
|
||||
muk(think, 'module', ['welefen']);
|
||||
muk(think, 'mode', think.mode_module);
|
||||
@ -525,7 +573,7 @@ describe('middleware/parse_route', function(){
|
||||
done();
|
||||
})
|
||||
})
|
||||
it('route_on on, rules is object, has reg 2', function(done){
|
||||
it('route_on on, rules is object, has reg 2', function(done){
|
||||
muk(think, 'module', ['test']);
|
||||
muk(think, 'mode', think.mode_module);
|
||||
muk(think, 'route', function(){
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user