2017-12-27 2 views
1

ich zur Zeit dient statische Dateien wie folgen aus: wie erwartetExpress.js dient statische Dateien innerhalb Anforderungsfunktion

app.use('/javascripts', express.static(join(__dirname + '/assets/javascripts'))); 

und es funktioniert.

Was ich tun möchte, ist die Verwendung der Benutzersitzung, um statische Dateien abhängig von der Sitzung zu dienen. Ich habe es versucht:

app.use('/javascripts', (req: Request, res: Response, next) =>{ 
    if(req.session.auth){ 
     express.static(join(__dirname + '/auth/javascripts')) 
    } else{ 
     express.static(join(__dirname + '/assets/javascripts')) 
    } 
}); 

aber es dient nicht die Dateien. Kann jemand erklären, warum es nicht funktioniert und wie ich erreichen kann, was ich versuche?

+1

einer Middleware-Funktion (das zweite Argument der '.use()') sollte die Anfrage verarbeiten und 'next()' aufrufen, damit dieser Code nichts tut. Schauen Sie sich die Antwort unter https://stackoverflow.com/questions/11569181/serve-static-files-on-a-dynamic-route-using-express an - was Sie versuchen, ist sehr ähnlich. – Ohad

+1

Funktioniert wie ein Charme! Bitte antworte, damit ich es annehmen kann, danke! – ncohen

Antwort

1

Eine Middleware-Funktion (das zweite Argument von .use()) sollte die Anfrage verarbeiten und next() aufrufen, so dass dieser Code nichts tut.

Was Sie brauchen, ist nur eine dynamische Route hat (anstelle von Middleware), die auf das richtige statische Verzeichnis umleitet nach req.session.auth:

app.get('/javascripts/*', function(req, res){ 
    if(req.session.auth){ 
     res.sendfile(req.params[0], {root: './auth/javascripts'}); 
    } else { 
     res.sendfile(req.params[0], {root: './assets/javascripts'}); 
    } 
}); 
Verwandte Themen