¿Cómo habilitar cors nodejs con express?

En resumen, estoy usando un visor como api de archivos de dicom llamado piedra angular, para esto me conecto al servicio WADO de dc4chee para obtener el dicom, dcm4chee ejecuta el puerto 8080, y mi aplicación en el nodo usa el puerto 3000, así que estoy tratando de mostrar El dicom del navegador.

https://www.npmjs.com/package/cornerstone-wado-image-loader

Este es el error que muestra el navegador.

XMLHttpRequest can not load http: // localhost: 8080 / wado? RequestType = WADO & studyUID = 1.2.840.113704.1.111.5 ... 26513.429 & contentType = application% 2Fdicom & transferSyntax = 1.2.840.10008.1.2. In 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http: // localhost: 3000' is therefore not allowed access. 

En la documentación especificada.

Tenga en cuenta que el servidor web debe ser compatible con el uso compartido de recursos de origen cruzado o la imagen no podrá cargarse. Si no puede habilitar CORS en el servidor web desde el que está cargando instancias de DICOM P10, puede usar un proxy inverso. Aquí hay un Node.js simple basado en http-proxy que agrega encabezados CORS que pueden resultarle útiles.

Y muestre este código de ejemplo, pero estoy usando Express y este código no funciona

 Var http = require ('http'),    HttpProxy = require ('http-proxy'); Var proxy = httpProxy.createProxyServer ({target: 'http: // localhost: 8042'}) .listen (8000); Proxy.on ('proxyRes', function (proxyReq, req, res, options) {  // add the CORS header to the response  Res.setHeader ('Access-Control-Allow-Origin', '*'); }); Proxy.on ('error', function (e) {  // suppress errors }); 

También usa npm cors aquí el código

 Var express = require ('express') Var cors = require ('cors') Var app = express () App.get ('/ products /: id', cors (), function (req, res, next) {  Res.json ({msg: 'This is CORS-enabled for a Single Route')) }) App.listen (80, function () {  Console.log ('CORS-enabled web server listening on port 80') }) 

Pero con esto habilito los cors en el puerto 3000 y no en el 8080, necesito el modo para activar o agregar ‘Access-Control-Allow-Origin en respuesta de encabezados y no en solicitud de encabezado,

¿Cómo puedo hacer para agregar CORS en el puerto 8080 donde dcm4chee se ejecuta desde NODEjs?

Lo siento por mi ingles

¡actualizar!

El servidor responde con lo siguiente;

RESPONDE HEADER

 Content-Type:application/dicom Date:Sat, 01 Apr 2017 01:15:38 GMT Expires:0 Server:Apache-Coyote/1.1 Transfer-Encoding:chunked X-Powered-By:Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0 

SOLICITAR TITULAR

 Accept:*/* Accept-Encoding:gzip, deflate, sdch, br Accept-Language:es-ES,es;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Host:localhost:8080 Origin:http: //localhost:3000 Referer:http: //localhost:3000/ User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 

¿CÓMO HABILITAR EL CORS EN RESPUESTA DE LA LÍDER

hacer

 npm install cors --save 

y simplemente agregue estas líneas en su archivo principal a donde va su solicitud.

 const cors = require('cors'); const express = require('express'); let app = express(); app.use(cors()); app.options('*', cors()); 

Para habilitar los cors puedes hacer esto:

 var cors = require('cors'); app.use(cors()); // to change your ports for different cors stuff: app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), function() { console.log('we are listening on: ', app.get('port')) }); 

Recuerde que los cors son middleware, por lo que querrá tener app.use antes de app.use para que sus solicitudes entrantes pasen por los cors antes de que lleguen a sus rutas.

Puede cambiar los puertos dependiendo de cuál desea utilizar. Estoy bastante seguro de que también puede reemplazar el || con && para escuchar en múltiples puertos y establecer cors en esos.

En el nodo sin formato, creo que tienes que usar writeHead, pero no estoy seguro de la implementación del nodo sin formato.

El error que muestran los medios del navegador, servidor localhost: 8080 rechazó una solicitud de localhost: 3000, parece que los cors no se ajustaron bien en el servidor localhost: 8080.

El encabezado de respuesta debe tener algo como esto:

 Access-Control-Allow-Headers:Content-Type,Content-Length, Authorization, Accept,X-Requested-With Access-Control-Allow-Methods:PUT,POST,GET,DELETE,OPTIONS Access-Control-Allow-Origin:* 

Intente agregar el encabezado de cors en su servidor 8080.

 app.all('*', function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); //... 

Agregar CORS (Intercambio de origen cruzado de recursos) a su nodo, la aplicación Express es bastante fácil …

Primero debe instalar la biblioteca de cors a través de npm , usando el siguiente comando:

 npm install cors -S 

y si lo necesita globalmente , simplemente agregue la bandera -g a él …

Luego en tu aplicación express , haz esto:

 const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); 

También estos son otros ejemplos para cors de su doc.

 var express = require('express') var cors = require('cors') var app = express() app.use(cors()) app.get('/products/:id', function (req, res, next) { res.json({msg: 'This is CORS-enabled for all origins!'}) }) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80') }) 

Configurando CORS de forma asíncrona:

 var express = require('express') var cors = require('cors') var app = express() var whitelist = ['http://example1.com', 'http://example2.com'] var corsOptionsDelegate = function (req, callback) { var corsOptions; if (whitelist.indexOf(req.header('Origin')) !== -1) { corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response }else{ corsOptions = { origin: false } // disable CORS for this request } callback(null, corsOptions) // callback expects two parameters: error and options } app.get('/products/:id', cors(corsOptionsDelegate), function (req, res, next) { res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}) }) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80') })