J'essaie de créer un serveur Web dans node.js qui prendra en charge les scripts inter-domaines, tout en fournissant des fichiers statiques à partir d'un répertoire public. J'utilise express.js et je ne sais pas vraiment comment autoriser les scripts interdomaines ( Access-Control-Allow-Origin: *
).
J'ai vu ce post , que je n'ai pas trouvé utile.
var express = require('express')
, app = express.createServer();
app.get('/', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
var oneYear = 31557600000;
// app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
"Access-Control-Allow-Origin", "*"
rend votre API intéressante pour les applications de phishing. Envisagez de n'autoriser que les origines connues.Réponses:
Consultez l'exemple de enable-cors.org :
Le premier appel (
app.all
) doit être effectué avant toutes les autres routes de votre application (ou du moins celles que vous souhaitez activer CORS).[Éditer]
Si vous souhaitez que les en-têtes s'affichent également pour les fichiers statiques, essayez ceci (assurez-vous que c'est avant l'appel à
use(express.static())
:J'ai testé cela avec votre code et j'ai obtenu les en-têtes sur les actifs du
public
répertoire:Vous pouvez, bien sûr, intégrer la fonction dans un module afin de pouvoir faire quelque chose comme
la source
use
ingapp.router
avantexpress.static
qu'il ne modifie pas les en- têtes des fichiers statiques; dans tous les cas, j'ai mis à jour ma réponse pour qu'elle fonctionne.Suite à la solution @Michelle Tilley, apparemment cela n'a pas fonctionné pour moi au début. Je ne sais pas pourquoi, j'utilise peut-être chrome et une version différente de node. Après quelques modifications mineures, cela fonctionne pour moi maintenant.
Au cas où quelqu'un serait confronté à un problème similaire au mien, cela pourrait être utile.
la source
Essayez ces modules cors npm.
Ce module fournit de nombreuses fonctionnalités pour affiner le réglage des cors tels que la liste blanche de domaine, l'activation des cors pour des API spécifiques, etc.
la source
J'utilise ceci:
ce code suppose que vos contrôleurs se trouvent dans le répertoire des contrôleurs. chaque fichier de ce répertoire devrait ressembler à ceci:
la source
Recommander d'utiliser le module cors express. Cela vous permet de mettre des domaines sur liste blanche, d'autoriser / restreindre des domaines spécifiquement aux itinéraires, etc.,
la source
Vous devez définir
Access-Control-Allow-Credentials: true
, si vous souhaitez utiliser "cookie" via "Credentials"la source
});
Ajoutez ce code dans votre fichier index.js ou server.js et modifiez le tableau d'origine autorisé en fonction de vos besoins.
la source
Un I étape supplémentaire nécessaire pour prendre devais changer mon URL de
http://localhost
lahttp://127.0.0.0
la source