Buduję aplikację ekspresową i chciałbym się dowiedzieć, jakie korzyści mogę uzyskać dzięki oprogramowaniu pośredniczącemu. Z grubsza chciałbym osiągnąć następujące z middleware.Organizacja oprogramowania pośredniego Node.js i sprawdzanie poprawności parametrów
Sporządzono:
- Dodaj requestId do wszystkich tras
- Uwierzytelnij żądanie
- Sprawdź, czy użytkownik ma dostęp do danego zasobu (oprócz uwierzytelniania )
nie wykonano:
- A) parametry Weryfikuj na danej trasie
- B) Organizuj pośredniczące w rozsądny sposób, jeśli różni się on od trasy do trasy i 3 middleware nazywane są rutynowo na trasie
I zdefiniowane moja middleware w osobnym pliku i zaimportować go do app.js tak:
var middleware = require('./middleware');
var requestId = middleware.requestId;
var authenticate = middleware.authenticate;
aby zastosować go do wszystkich tras dodam to wyrazić 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
});
I do specyfiki trasy, dodaję go jako app.get argumentu:
var routes = require('./v1/routes');
app.get("/v1/foo", routes.foo);
app.get("/v1/bar", authenticate, routes.bar);
PROBLEM
ja bym chciała mieć middleware, że mogę użyć do sprawdzenia parametrów
validate('x','y','z')
i używać go tak jak na danej trasie:
app.get("/v1/bar", authenticate, validate('x','y','z'), routes.bar);
Czy jest to dobry sposób na zrobienie tego? A może powinienem sprawdzać tylko na podstawie trasy w plikach definicji trasy?
Problem B
Czy istnieje lepszy sposób na porządkowanie i wykorzystywanie moich middleware, które należy wziąć pod uwagę?
Aktualizacja
Szukam sposobu, aby potwierdzić parametry, które zmieniają się w poszczególnych trasach. Poniższe oczywiście nie działają - nie mogę przekazać paramów do oprogramowania pośredniczącego - ale czy istnieje sposób zdefiniowania oprogramowania pośredniego, które to robi i nazywa to tak, jak powiedziałem powyżej?
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();
}
Będziesz chciał przekazać polecenie re, do oprogramowania pośredniego, aby sprawdzić poprawność (req, res), a następnie podjąć z niego działanie. Zwykle jest to prostsze niż przekazywanie z góry określonych zmiennych. – Brandon
Spróbuj zajrzeć do wyrażenia ekspresowego. Nie użyłem go w oprogramowaniu pośredniczącym, ale wygląda na to, że jest to możliwe: https://github.com/ctavan/express-validator – chovy