2016-04-04 13 views
4

Ich benutze CORS https://www.npmjs.com/package/cors zu erlauben whitedomain Liste.Node Express Cors und Routen

var whitelist = ['http://example1.com', 'http://example2.com']; 
var corsOptions = { 
    origin: function(origin, callback){ 
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1; 
    callback(null, originIsWhitelisted); 
    } 
}; 

app.post('/products/:id', cors(corsOptions), function (req, res, next) { 
    console.log(0); 
    res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' });   
}); 

Bei non whitedomain der Server No 'Access-Control-Allow-Origin' liefert was in Ordnung ist, aber zur gleichen Zeit kann ich auf Debug sehen, dass die Linien res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' }); und console.log(0); noch ausgeführt werden - console.log(0);0 in der Konsole auf Server-Seite gedruckt, etwas, das ich in diesem Fall nicht.

kann also sagen, wenn auf Datenbank krümmt:

app.post('/products/:id', cors(corsOptions), function (req, res, next) { 
     writeToDatabase(); 
     res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' });    
    }); 

Auf diese Weise writeToDatabase(); wird immer dann ausgeführt werden. Aber ich möchte das vermeiden, weil ich im Fall von non whitelisted Domain keine Sachen in die Datenbank schreiben muss.

Irgendwelche Gedanken?

+0

Sie können das machen ** ** HTTP Anfrage ** ** Preflight, indem Sie eine benutzerdefinierte Hinzufügen Anfrage-Header verweisen [hier] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests). Auf diese Weise wird die folgende ** Route ** nicht an erster Stelle ausgeführt, wenn der Ursprung nicht erlaubt ist. Wie es zuerst sendet ** OPTIONS ** Anfrage, die die CORS überprüft und sendet dann die POST-Anfrage. – Nivesh

Antwort

0

Meine Idee ist, zu verwenden, wenn die Anfrage innerhalb der app.post so zum Beispiel zu filtern,

app.post('/products/:id', cors(corsOptions), function (req, res, next) { 
     if(req.header[origin]===whitelisted){ 
     writeToDatabase(); 
     res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' }); }   
    }); 
+0

Ja, das ist eine Art Code-Geruch-Lösung, die für jede geschützte Route wiederholt werden muss. – sreginogemoh