Ich wollte das auch, also klopfte ich einen schnellen Weg zu 404 Anfragen mit nicht übereinstimmendem Fall.
Es ist nicht besonders effizient, so dass ich es nur in der Entwicklung ausführen. Es überprüft nur den Dateinamen. Es prüft nicht den Fall der Ordner über der Datei.
Wie man es verwendet:
var express = require('express');
var app = express();
// You can do this before or after the express() call
// But it must come before express.static() is called
var inDevelopment = (process.NODE_ENV || 'local') === 'local';
if (inDevelopment) {
require('./modules/makeExpressStaticCaseSensitive')(express);
}
app.use(express.static(path.join(__dirname, 'public_html')));
Das Skript module/makeExpressStaticCaseSensitive.js
module.exports = function (express) {
var fs = require('fs')
var pathlib = require('path');
var parseUrl = require('express/node_modules/parseurl')
var oldStatic = express.static;
var newStatic = function (root, options) {
var opts = Object.create(options || null);
var originalHandler = oldStatic(root, options);
var wrappedHandler = function (req, res, next) {
var filepath = pathlib.join(root, parseUrl(req).pathname);
var dirpath = pathlib.dirname(filepath);
var filename = pathlib.basename(filepath);
// @todo Reading the entire directory listing and then searching it is quite inefficient for large folders
// We should find a more efficient way to do this for one file at a time
fs.readdir(dirpath, function (err, files) {
if (err) return next(err);
var fileIsThere = files.indexOf(filename) >= 0;
if (fileIsThere) {
originalHandler(req, res, next);
} else {
res.status(404).end();
}
});
};
return wrappedHandler;
};
express.static = newStatic;
};
ich eine effizientere Version geschrieben haben, die die Ausgabe von readdir()
für einige Sekunden-Caches und den gesamten Pfad überprüfen, aber es ist etwas länger. auch einige Ratschläge für eine einfache alternative Lösung gegeben
Ich würde lieber versuchen, Dateipfadkonsistenz dort zu garantieren. Wenn die angeforderte Datei 'image.jpeg' ist, benennen Sie sie nicht 'Image.jpeg'. Gibt es etwas, das dich davon abhält? –
Die Absicht ist sicherlich, dass der Fall übereinstimmen würde, aber diese Inkonsistenz im Verhalten bedeutet, dass unsere Infrastruktur anfällig für Tippfehler/Entwicklerfehler ist und dass Probleme erst nach Bereitstellung des Codes erkannt werden. Ich möchte entweder lokal und auf dem Server den Code auf Fehler setzen, oder lokal und auf dem Server erfolgreich sein. –
'serve-static' hat keine Option, um die Groß-/Kleinschreibung anzugeben (was auf manchen Plattformen, wie Sie bereits erwähnt haben, schwierig zu erreichen ist). Am besten würden Sie Integrationstests durchführen, die den Serverprozess für die Bereitstellung statischer Dateien abdecken. –