(Disclaimer: non conosco nessuna delle tecnologie menzionate nella domanda, sto solo considerando le descrizioni sulla domanda stessa e gli articoli collegati.)
Dipendenza e ordine di esecuzione. Basato sulla documentazione collegata ,
- Sembra che tu possa controllare l'ordine di esecuzione dei middleware semplicemente chiamando
app.use(...)
in un ordine particolare.
- Può essere documentato chiaramente all'interno del tuo progetto.
- C'è un modo per farlo funzionare correttamente; se si può fare in modo manutentivo (non fragile) è una questione di
- Il tuo design e
- La tua (o programmatore) disciplina nel seguire le linee guida
Esistono modelli e tecniche di progettazione pertinenti che ti aiuteranno a mantenere la dipendenza e l'ordine di esecuzione corretti.
- Modello di comando
- Modello della catena di responsabilità
- Motivo decoratore
-
Ordinamento topologico , che può essere utilizzato per calcolare l'ordine di esecuzione in base alle loro dipendenze. Probabilmente lo farai con carta e penna, dato che hai il controllo su quali middleware saranno eseguiti e non ci saranno nuovi middleware da aggiungere.
Riguardo a "monkey-patch (ing) l'oggetto risposta",
- Un middleware che viene eseguito in anticipo può inserire alcuni segnaposto nella risposta, che verrà sostituito dal contenuto reale da un altro middleware che verrà eseguito in seguito.
- Può esserci anche un middleware finale che rimuove qualsiasi segnaposto che non è stato elaborato (vale a dire come un catch-all in caso di errore di programmazione) e lo sostituisce con un messaggio di errore.
- Per prevenire attacchi di iniezione (l'utente manipola in qualche modo il contenuto inviato dall'utente per sembrare indistinguibile da un segnaposto), puoi disinfettare (rimuovere) tali segnaposti dalla risposta all'inizio, prima che vengano aggiunti eventuali segnaposti originali.
- Tutto il resto che non appartiene alla risposta potrebbe essere scritto meglio sull'oggetto richiesta o sul middleware di sessione.
Per risolvere le dipendenze circolari tra middleware, si può implementare un middleware che dovrebbe essere eseguito all'inizio. Questo middleware può fare una "raccolta dei requisiti" sulla richiesta, decidere quale altro middleware sarà potenzialmente attivato e quindi impostare vari flag sull'oggetto richiesta.
Questo middleware di "raccolta dei requisiti" dovrebbe evitare di eseguire il lavoro effettivo che causa la dipendenza circolare.
Il problema dell'autenticazione non è unico per nessun paradigma. Si tratta di un problema generale di progettazione dell'interfaccia utente che interessa ogni applicazione in cui l'utente non ha bisogno di autenticare in anticipo.
Il problema principale è questo. Dopo che l'utente ha navigato su una pagina e quella pagina contiene elementi che potenzialmente potrebbero richiedere l'autenticazione, le domande sono:
- Come consentire all'utente di scoprire facilmente se l'app si trova in uno stato autenticato o meno (ad esempio, consentire all'utente di vedere se è "connesso" o meno)
- Come comunicare all'utente che ci sono tali elementi (che richiederebbero l'autenticazione)?
- Nascondendolo completamente?
- Mostra un riquadro che sfuma sopra di esso (ma suggerisce ancora l'esistenza di ciò che è di seguito) e mette un pulsante di accesso in cima? (Non ci sarebbero informazioni specifiche dell'utente nel contenuto sfocato.)
- Mostra l'elemento con le stringhe segnaposto
- L'utente deve essere costretto ad autenticare? Se è così,
- Questo dovrebbe accadere quando la pagina viene caricata?
- Oppure solo quando l'utente fa clic sull'elemento (o su un pulsante "Accedi"?)
- Esistono modi meno intrusivi per autenticare l'utente?
- Questo comprometterà la sicurezza? I benefici superano i rischi?