1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| var send = require('send');
var stream = require('stream');
var utils = require('connect').utils;
var parse = utils.parseUrl;
var url = require('url');
// Connect.static with lang detection and translation
module.exports = function (root, options) {
if (!root) throw new Error('static() root path required');
options = options || {};
if (!options.default_locale) {
options.default_locale = 'en';
}
return function staticlang(req, res, next) {
var accept_language = req.headers['accept-language'];
var locales = [];
if (accept_language) {
accept_language.split(',').forEach(function (lang) {
locales.push(lang.split(';', 1)[0].toLowerCase());
});
req.locales = locales;
} else {
req.locales = [options.default_locale];
}
if ('GET' != req.method && 'HEAD' != req.method){ next(); }
else {
var path = parse(req).pathname;
var pause = utils.pause(req);
console.log("Connect lang ",req.locales, path);
send(req, path)
.maxage(options.maxAge || 0)
.root(root)
.hidden(options.hidden)
.on('error', function error(err) {
if (404 == err.status) { next(); pause.resume(); }
else { next(err); }
})
.on('directory', function directory() {
if (options.redirect === false) { next(); pause.resume(); }
else {
var pathname = url.parse(req.originalUrl).pathname;
res.statusCode = 301;
res.setHeader('Location', pathname + '/');
res.end('Redirecting to ' + utils.escape(pathname) + '/');
}
})
.on('data', function(data){
console.log("Data: ",data); //<- je ne reçois rien ici
})
.pipe(res);
}
};
}; |
Partager