¿Cómo habilitar cors nodejs con express?

Resuelto M. Node asked hace 7 años • 0 respuestas

En resumen estoy usando un visor como api de archivos dicom llamado cornerstone, 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 admitir el uso compartido de recursos entre fuentes o la imagen no se cargará. Si no puede habilitar CORS en el servidor web desde el que está cargando instancias DICOM P10, puede utilizar un proxy inverso. Aquí hay un Node.js simple basado en http-proxy que agrega encabezados CORS que pueden resultarle útiles.

Y muestro 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 use 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 el cors en el puerto 3000 y no en el 8080, necesito que el modo se active o agregue 'Access-Control-Allow-Origin en la respuesta de los encabezados y no en la solicitud del encabezado,

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

¡actualizar!

El servidor responde con lo siguiente;

ENCABEZADO DE RESPONDER

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

ENCABEZADO DE SOLICITUD

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 EL ENCABEZADO DE RESPUESTA?

M. Node avatar Apr 01 '17 04:04 M. Node
Aceptado

hacer

npm install cors --save

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

const cors = require('cors');
const express = require('express');
const app = express();
app.use(cors());
Yatender Singh avatar Jul 12 '2017 06:07 Yatender Singh

Agregar CORS (Cross-Origin-Resource-Sharing) a su nodo, la aplicación express es bastante fácil...

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

npm install cors -S

y si lo necesita globalmente , simplemente agréguele -guna bandera...

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 de cors de su documento:

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')
})

Configuración de CORS de forma asincrónica:

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')
})
Alireza avatar Oct 26 '2017 12:10 Alireza

Para habilitar 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á tenerlo app.useantes para que sus solicitudes entrantes pasen por cors antes de que lleguen a sus rutas.

Puedes cambiar los puertos dependiendo de cuál quieras usar. Estoy bastante seguro de que también puedes reemplazar ||with &&para escuchar en múltiples puertos y configurar cors en ellos.

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

JonathanMitchell avatar Mar 31 '2017 22:03 JonathanMitchell