Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
194663a06f | ||
|
|
fd277c695c | ||
|
|
ea7b37f19b | ||
|
|
d613373f78 | ||
|
|
afb181df84 | ||
|
|
a70edf46cd | ||
|
|
9ccd58738b | ||
|
|
db905a6d8a | ||
|
|
eeda184dbd |
13
History.md
13
History.md
@@ -1,3 +1,16 @@
|
||||
1.1.6 / 2014-08-10
|
||||
==================
|
||||
|
||||
* Fix URL parsing
|
||||
* deps: parseurl@~1.3.0
|
||||
|
||||
1.1.5 / 2014-07-27
|
||||
==================
|
||||
|
||||
* Fix Content-Length calculation for multi-byte file names
|
||||
* deps: accepts@~1.0.7
|
||||
- deps: negotiator@0.4.7
|
||||
|
||||
1.1.4 / 2014-06-20
|
||||
==================
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
[](http://badge.fury.io/js/serve-index)
|
||||
[](https://travis-ci.org/expressjs/serve-index)
|
||||
[](https://coveralls.io/r/expressjs/serve-index)
|
||||
[](https://www.gittip.com/dougwilson/)
|
||||
|
||||
Serves pages that contain directory listings for a given path.
|
||||
|
||||
|
||||
38
index.js
38
index.js
@@ -17,13 +17,13 @@
|
||||
var accepts = require('accepts');
|
||||
var http = require('http')
|
||||
, fs = require('fs')
|
||||
, parse = require('url').parse
|
||||
, path = require('path')
|
||||
, normalize = path.normalize
|
||||
, sep = path.sep
|
||||
, extname = path.extname
|
||||
, join = path.join;
|
||||
var Batch = require('batch');
|
||||
var parseUrl = require('parseurl');
|
||||
|
||||
/*!
|
||||
* Icon cache.
|
||||
@@ -94,10 +94,12 @@ exports = module.exports = function serveIndex(root, options){
|
||||
return;
|
||||
}
|
||||
|
||||
var url = parse(req.url)
|
||||
, dir = decodeURIComponent(url.pathname)
|
||||
// parse URLs
|
||||
var url = parseUrl(req);
|
||||
var originalUrl = parseUrl.original(req);
|
||||
|
||||
var dir = decodeURIComponent(url.pathname)
|
||||
, path = normalize(join(root, dir))
|
||||
, originalUrl = parse(req.originalUrl || req.url)
|
||||
, originalDir = decodeURIComponent(originalUrl.pathname)
|
||||
, showUp = path != root;
|
||||
|
||||
@@ -160,9 +162,11 @@ exports.html = function(req, res, files, next, dir, showUp, icons, path, view, t
|
||||
.replace('{files}', html(files, dir, icons, view))
|
||||
.replace('{directory}', dir)
|
||||
.replace('{linked-path}', htmlPath(dir));
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.setHeader('Content-Length', str.length);
|
||||
res.end(str);
|
||||
|
||||
var buf = new Buffer(str, 'utf8');
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader('Content-Length', buf.length);
|
||||
res.end(buf);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -173,10 +177,12 @@ exports.html = function(req, res, files, next, dir, showUp, icons, path, view, t
|
||||
*/
|
||||
|
||||
exports.json = function(req, res, files){
|
||||
files = JSON.stringify(files);
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.setHeader('Content-Length', files.length);
|
||||
res.end(files);
|
||||
var body = JSON.stringify(files);
|
||||
var buf = new Buffer(body, 'utf8');
|
||||
|
||||
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
||||
res.setHeader('Content-Length', buf.length);
|
||||
res.end(buf);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -184,10 +190,12 @@ exports.json = function(req, res, files){
|
||||
*/
|
||||
|
||||
exports.plain = function(req, res, files){
|
||||
files = files.join('\n') + '\n';
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
res.setHeader('Content-Length', files.length);
|
||||
res.end(files);
|
||||
var body = files.join('\n') + '\n';
|
||||
var buf = new Buffer(body, 'utf8');
|
||||
|
||||
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
||||
res.setHeader('Content-Length', buf.length);
|
||||
res.end(buf);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
11
package.json
11
package.json
@@ -1,17 +1,18 @@
|
||||
{
|
||||
"name": "serve-index",
|
||||
"description": "Serve directory listings",
|
||||
"version": "1.1.4",
|
||||
"version": "1.1.6",
|
||||
"author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
|
||||
"license": "MIT",
|
||||
"repository": "expressjs/serve-index",
|
||||
"dependencies": {
|
||||
"accepts": "~1.0.5",
|
||||
"batch": "0.5.1"
|
||||
"accepts": "~1.0.7",
|
||||
"batch": "0.5.1",
|
||||
"parseurl": "~1.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"istanbul": "0.2.10",
|
||||
"mocha": "~1.20.0",
|
||||
"istanbul": "0.3.0",
|
||||
"mocha": "~1.21.1",
|
||||
"should": "~4.0.0",
|
||||
"supertest": "~0.13.0"
|
||||
},
|
||||
|
||||
0
test/fixtures/さくら.txt
vendored
Normal file
0
test/fixtures/さくら.txt
vendored
Normal file
22
test/test.js
22
test/test.js
@@ -15,7 +15,7 @@ describe('serveIndex(root)', function () {
|
||||
|
||||
request(server)
|
||||
.get('/')
|
||||
.expect('Content-Type', 'text/html')
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(200, done)
|
||||
})
|
||||
|
||||
@@ -107,6 +107,7 @@ describe('serveIndex(root)', function () {
|
||||
.expect(/file #1\.txt/)
|
||||
.expect(/nums/)
|
||||
.expect(/todo\.txt/)
|
||||
.expect(/さくら\.txt/)
|
||||
.expect(200, done)
|
||||
});
|
||||
});
|
||||
@@ -119,11 +120,12 @@ describe('serveIndex(root)', function () {
|
||||
.get('/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(/<a href="\/g%23%20%253%20o%20%252525%20%2537%20dir"/)
|
||||
.expect(/<a href="\/users"/)
|
||||
.expect(/<a href="\/file%20%231.txt"/)
|
||||
.expect(/<a href="\/todo.txt"/)
|
||||
.expect(/<a href="\/%E3%81%95%E3%81%8F%E3%82%89\.txt"/)
|
||||
.end(done);
|
||||
});
|
||||
|
||||
@@ -134,7 +136,7 @@ describe('serveIndex(root)', function () {
|
||||
.get('/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.end(function (err, res) {
|
||||
if (err) throw err;
|
||||
var urls = res.text.split(/<a href="([^"]*)"/).filter(function(s, i){ return i%2; });
|
||||
@@ -146,6 +148,7 @@ describe('serveIndex(root)', function () {
|
||||
'/foo%20bar',
|
||||
'/nums',
|
||||
'/todo.txt',
|
||||
'/%E3%81%95%E3%81%8F%E3%82%89.txt'
|
||||
]);
|
||||
done();
|
||||
});
|
||||
@@ -160,11 +163,12 @@ describe('serveIndex(root)', function () {
|
||||
.get('/')
|
||||
.set('Accept', 'text/plain')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /plain/)
|
||||
.expect('Content-Type', 'text/plain; charset=utf-8')
|
||||
.expect(/users/)
|
||||
.expect(/g# %3 o %2525 %37 dir/)
|
||||
.expect(/file #1.txt/)
|
||||
.expect(/todo.txt/)
|
||||
.expect(/さくら\.txt/)
|
||||
.end(done);
|
||||
});
|
||||
});
|
||||
@@ -304,7 +308,7 @@ describe('serveIndex(root)', function () {
|
||||
request(server)
|
||||
.get('/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200, '<b>2 text files</b>', done)
|
||||
.expect(200, '<b>3 text files</b>', done)
|
||||
});
|
||||
|
||||
it('should get dir name', function (done) {
|
||||
@@ -419,7 +423,7 @@ describe('serveIndex(root)', function () {
|
||||
.get('/users/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(/<a href="\/users\/index.html"/)
|
||||
.expect(/<a href="\/users\/tobi.txt"/)
|
||||
.end(done);
|
||||
@@ -432,7 +436,7 @@ describe('serveIndex(root)', function () {
|
||||
.get('/%23directory/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(/<a href="\/%23directory"/)
|
||||
.expect(/<a href="\/%23directory\/index.html"/)
|
||||
.end(done);
|
||||
@@ -445,7 +449,7 @@ describe('serveIndex(root)', function () {
|
||||
.get('/g%23%20%253%20o%20%252525%20%2537%20dir/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(/<a href="\/g%23%20%253%20o%20%252525%20%2537%20dir"/)
|
||||
.expect(/<a href="\/g%23%20%253%20o%20%252525%20%2537%20dir\/empty.txt"/)
|
||||
.end(done);
|
||||
@@ -504,7 +508,7 @@ describe('serveIndex(root)', function () {
|
||||
.get('/')
|
||||
.set('Accept', 'text/html')
|
||||
.expect(200)
|
||||
.expect('Content-Type', /html/)
|
||||
.expect('Content-Type', 'text/html; charset=utf-8')
|
||||
.expect(/color: #00ff00;/)
|
||||
.end(done);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user