Frage Einrichten von zwei verschiedenen statischen Verzeichnissen im node.js Express-Framework


Ist es möglich? Ich möchte zwei verschiedene Verzeichnisse einrichten, um statische Dateien zu liefern. Sagen wir / public und / mnt


75
2018-05-12 04:53


Ursprung


Antworten:


Sie können auch den Pfad festlegen, über den statische Dateien an das Web gesendet werden, indem Sie einen zusätzlichen (ersten) Parameter angeben use() so:

app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));

Auf diese Weise erhalten Sie zwei verschiedene Verzeichnisse im Internet, die Ihre lokalen Verzeichnisse spiegeln, und nicht einen URL-Pfad, der zwischen zwei lokalen Verzeichnissen fehlschlägt.

Mit anderen Worten das URL-Muster:

http://your.server.com/public/*

Bedient Dateien aus dem lokalen Verzeichnis public während:

http://your.server.com/public2/*

Bedient Dateien aus dem lokalen Verzeichnis public2.

Übrigens ist dies auch nützlich, wenn Sie nicht möchten, dass static die Dateien vom Stammverzeichnis Ihres Servers aus bedient, sondern von einem besser qualifizierten Pfad.

HTH


122
2017-09-28 22:51



Mit einer Middleware-Injektion ist es nicht möglich, aber Sie können injizieren static Middleware mehrfach:

app.configure('development', function(){
    app.use(express.static(__dirname + '/public1'));
    app.use(express.static(__dirname + '/public2'));
});

Erläuterung

Ansehen Verbinden Sie / lib / Middleware / static.js # 143:

path = normalize(join(root, path));

Es gibt options.root ist ein statischer Stamm, den Sie definieren express.static oder connect.static anrufen, und path ist Anforderungsweg

Schau dir mehr an Verbinden Sie / lib / Middleware / static.js # 154:

  fs.stat(path, function(err, stat){
    // ignore ENOENT
    if (err) {
      if (fn) return fn(err);
     return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
       ? next()
       : next(err);

Der Pfad wurde nur einmal überprüft, und wenn die Datei nicht gefunden wurde, wurde die Anfrage an die nächste Middleware weitergeleitet.

Update für Connect 2.x

Links zu Code sind für Connect 2.x inaktiv, aber die Verwendung mehrerer statischer Middleware ist nach wie vor möglich.


39
2018-05-12 10:23



Sie können Verzeichnisse auch in einem einzigen sichtbaren Verzeichnis zusammenführen

Verzeichnisaufbau

  • /static
  • /alternate_static

Code

app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));

Sowohl static als auch alternate_static werden so bedient, als befänden sie sich im selben Verzeichnis. Achten Sie jedoch auf Dateinamen-Clobbers.


38
2018-02-12 19:34