mirror of
https://github.com/toptal/haste-server.git
synced 2024-12-25 17:17:40 +01:00
preparse static elements rather than fs'ing them
This commit is contained in:
parent
0fe0306caa
commit
b173cdd144
@ -8,6 +8,12 @@ var winston = require('winston');
|
||||
var StaticHandler = function(path) {
|
||||
this.basePath = path;
|
||||
this.defaultPath = '/index.html';
|
||||
// Grab the list of available files - and move into hash for quick lookup
|
||||
var available = fs.readdirSync(this.basePath);
|
||||
this.availablePaths = {};
|
||||
for (var i = 0; i < available.length; i++) {
|
||||
this.availablePaths['/' + available[i]] = true;
|
||||
}
|
||||
};
|
||||
|
||||
// Determine the content type for a given extension
|
||||
@ -24,28 +30,23 @@ StaticHandler.contentTypeFor = function(ext) {
|
||||
|
||||
// Handle a request, and serve back the asset if it exists
|
||||
StaticHandler.prototype.handle = function(incPath, response) {
|
||||
// Go to index if not found or /
|
||||
if (!this.availablePaths[incPath]) incPath = this.defaultPath;
|
||||
var filePath = this.basePath + (incPath == '/' ? this.defaultPath : incPath);
|
||||
// And then stream the file back
|
||||
var _this = this;
|
||||
path.exists(filePath, function(exists) {
|
||||
if (exists) {
|
||||
fs.readFile(filePath, function(error, content) {
|
||||
if (error) {
|
||||
winston.error('unable to read file', { path: filePath, error: error.message });
|
||||
response.writeHead(500, { 'content-type': 'application/json' });
|
||||
response.end(JSON.stringify({ message: 'IO: Unable to read file' }));
|
||||
}
|
||||
else {
|
||||
var contentType = StaticHandler.contentTypeFor(path.extname(filePath));
|
||||
response.writeHead(200, { 'content-type': contentType });
|
||||
response.end(content, 'utf-8');
|
||||
}
|
||||
});
|
||||
fs.readFile(filePath, function(error, content) {
|
||||
if (error) {
|
||||
winston.error('unable to read file', { path: filePath, error: error.message });
|
||||
response.writeHead(500, { 'content-type': 'application/json' });
|
||||
response.end(JSON.stringify({ message: 'IO: Unable to read file' }));
|
||||
}
|
||||
else {
|
||||
// serve the default route so that pushstate can work if not found
|
||||
_this.handle('/', response);
|
||||
var contentType = StaticHandler.contentTypeFor(path.extname(filePath));
|
||||
response.writeHead(200, { 'content-type': contentType });
|
||||
response.end(content, 'utf-8');
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = StaticHandler;
|
||||
|
Loading…
Reference in New Issue
Block a user