Estoy tratando de construir un servidor web en node.js que admita secuencias de comandos entre dominios, al mismo tiempo que proporciona archivos estáticos desde un directorio público. Estoy usando express.js y no estoy realmente seguro de cómo permitir las secuencias de comandos entre dominios ( Access-Control-Allow-Origin: *
).
Vi esta publicación , que no me resultó útil.
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);
Respuestas:
Consulte el ejemplo de enable-cors.org :
La primera llamada (
app.all
) debe realizarse antes que todas las demás rutas en su aplicación (o al menos las que desea que estén habilitadas para CORS).[Editar]
Si desea que los encabezados también se muestren para archivos estáticos, intente esto (asegúrese de que sea antes de la llamada a
use(express.static())
:Probé esto con su código y obtuve los encabezados de los activos del
public
directorio:Por supuesto, podría empaquetar la función en un módulo para que pueda hacer algo como
fuente
use
usandoapp.router
antesexpress.static
, no modifica los encabezados de los archivos estáticos; en cualquier caso, he actualizado mi respuesta para que funcione.Siguiendo la solución de @Michelle Tilley, aparentemente no funcionó para mí al principio. No estoy seguro de por qué, tal vez esté usando Chrome y una versión diferente de node. Después de algunos ajustes menores, ahora me está funcionando.
En caso de que alguien enfrente un problema similar al mío, esto podría ser útil.
fuente
Pruebe estos módulos cors npm.
Este módulo proporciona muchas funciones para ajustar la configuración de cors, como la lista blanca de dominios, la habilitación de cors para apis específicas, etc.
fuente
Yo uso esto:
este código asume que sus controladores están ubicados en el directorio de controladores. cada archivo en este directorio debería ser algo como esto:
fuente
Recomiende usar el módulo cors express. Esto le permite incluir dominios en la lista blanca, permitir / restringir dominios específicamente a rutas, etc.
fuente
Debe configurar
Access-Control-Allow-Credentials: true
, si desea utilizar "cookies" a través de "Credenciales"fuente
});
Agregue este código en su archivo index.js o server.js y cambie la matriz de origen permitida de acuerdo con sus requisitos.
fuente
Un paso adicional que tenía que tomar era cambiar mi URL de
http://localhost
ahttp://127.0.0.0
fuente