Sto costruendo un'app express e mi piacerebbe sapere quale fantasia posso ottenere con il middleware. Approssimativamente, voglio realizzare quanto segue con il middleware.Node.js organizzazione del middleware e validazione dei parametri
Fatto:
- Aggiungi RequestID a tutte le rotte richiesta
- Autentica
- controllare se un utente ha accesso a una determinata risorsa (a parte l'autenticazione )
non fatto:
- A) parametri Convalidare per un dato percorso
- B) Organizzare middleware in modo sano se differisce da una via, e 3 middleware sono chiamati regolarmente a tratta
Ho definito il mio middleware in un file separato, e importarlo in app.js in questo modo:
var middleware = require('./middleware');
var requestId = middleware.requestId;
var authenticate = middleware.authenticate;
applicarlo a tutte le rotte lo aggiungo esprimere config:
var app = express.createServer();
app.configure(function() {
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(requestId); // add requestId to all incoming requests
});
E per le specifiche di percorso, lo aggiungo come argomento app.get:
var routes = require('./v1/routes');
app.get("/v1/foo", routes.foo);
app.get("/v1/bar", authenticate, routes.bar);
Problema Un
Mi piacerebbe avere middleware che avrei potuto utilizzare per controllare i parametri
validate('x','y','z')
e usarlo in questo modo per un determinato percorso:
app.get("/v1/bar", authenticate, validate('x','y','z'), routes.bar);
C'è un buon modo per fare questo? O dovrei semplicemente convalidare in base alla rotta all'interno dei file di definizione del percorso?
Problema B
Esiste un modo migliore per organizzare e utilizzare il mio middleware che devo considerare?
Aggiornamento
Sto cercando un modo per convalidare i parametri che cambiano molto tra percorsi. Ovviamente il sotto non funziona, non posso passare i param nel middleware, ma è possibile che io definisca il middleware che lo fa e lo chiamo come ho detto sopra?
var validateParams = function (req, res, params, callback) {
// Make sure the required parameters are in the request
console.log('checking for params '+params);
for (var i = 0; i < params.length; i++) {
var param = params[i];
if(!(param in req.query)){
logger.info('cannot find param ['+param+'] in req: '+JSON.stringify(req.query));
res.writeHead(400, {
"Content-Type": "application/json"
});
var out = {
"err": "request missing required parameters"
};
res.end(JSON.stringify(out));
return;
}
}
callback();
}
Si vorrà passare req, res al proprio middleware in modo da validare (req, res) e quindi agire su di esso da lì. Di solito è più semplice che passare in variabili predeterminate. – Brandon
Prova a cercare in express-validator. Non l'ho usato nel middleware, ma sembra possibile: https://github.com/ctavan/express-validator – chovy