it-swarm.com.de

Wie kann ich cors nodejs mit express aktivieren?

Zusammenfassend verwende ich einen Viewer wie ein API von Dicom-Dateien, der als Cornerstone bezeichnet wird. Dafür verbinde ich mich mit dem WADO-Dienst von Dc4chee, um Dicom zu erhalten. Dcm4chee führt Port 8080 und meine Anwendung auf dem Knoten verwendet Port 3000. Ich versuche zu zeigen Das Browser-Dicom.

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

Dies ist der vom Browser angezeigte Fehler

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.

In der Dokumentation angegeben

Beachten Sie, dass der Webserver die gemeinsame Ressourcennutzung unterstützen muss, da sonst das Image nicht geladen werden kann. Wenn Sie CORS nicht auf dem Webserver aktivieren können, von dem Sie DICOM P10-Instanzen laden, können Sie einen Reverse-Proxy verwenden. Hier ist eine einfache Node.js, die auf http-proxy basiert und CORS-Header hinzufügt, die Sie möglicherweise nützlich finden.

Zeigen Sie diesen Beispielcode, aber ich verwende Express, und dieser Code funktioniert nicht

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

Verwenden Sie auch npm cors hier den Code

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

Aber damit aktiviere ich die Kors auf Port 3000 und nicht den 8080. Ich brauche den Modus, um 'Access-Control-Allow-Origin in der Header-Antwort und nicht in der Header-Anfrage zu aktivieren oder hinzuzufügen.

Wie kann ich CORS an Port 8080 hinzufügen, wo dcm4chee von NODEjs ausgeführt wird?

entschuldigung für mein Englisch

aktualisieren!

Der Server antwortet mit den folgenden Angaben:

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

ANFORDERN HEADER

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

WIE ERMÖGLICHEN SIE DEN KERN IM RESPONSE HEADER?

7
M. Node

tun

npm install cors --save

und fügen Sie diese Zeilen einfach in Ihre Hauptdatei ein, in der Ihre Anfrage abläuft.

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

Um cors zu aktivieren, können Sie Folgendes tun:

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

Denken Sie daran, dass Korsas Middleware sind. Sie sollten also app.use vor sich haben, damit Ihre eingehenden Anfragen Korsas durchlaufen, bevor sie Ihre Routen erreichen.

Sie können die Ports ändern, je nachdem, welche Sie verwenden möchten. Ich bin mir ziemlich sicher, dass Sie auch || durch && ersetzen können, um mehrere Ports zu überwachen und die Ports einzustellen. 

Ich glaube, dass Sie im Rohknoten den writeHead verwenden müssen, aber ich bin mir nicht sicher, was die Implementierung des Rohknotens betrifft. 

4

Der vom Browser angezeigte Fehler bedeutet, Server localhost: 8080 hat eine Anforderung von localhost: 3000 abgelehnt.

Der Antwortheader sollte ungefähr so ​​aussehen:

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:*

Fügen Sie in Ihrem 8080-Server den Header cors hinzu.

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");
//...
2
cxxsn

Hinzufügen von CORS (Cross-Origin-Resource-Sharing) zu Ihrem Knoten, Express-App ist recht einfach ...

Sie müssen zuerst cors library über npm installieren, indem Sie den folgenden Befehl verwenden:

npm install cors -S

und wenn Sie es brauchen - global , fügen Sie einfach das Flag -g hinzu ...

Führen Sie dann in Ihrer express-App Folgendes aus:

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

Dies sind auch andere Beispiele für Cors aus ihrem Dokument:

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

CORS asynchron konfigurieren:

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