M. *_*ode 8 javascript dicom node.js cors express
总而言之,我正在使用像dicom文件的api这样的观众,称为基石,为此,我连接到dc4chee的WADO服务以获取dicom,dcm4chee运行端口8080,我的节点上的应用程序使用端口3000,所以我试图显示浏览器的dicom.
https://www.npmjs.com/package/cornerstone-wado-image-loader
这是浏览器显示的错误
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.
Run Code Online (Sandbox Code Playgroud)
在指定的文档中
请注意,Web服务器必须支持跨源资源共享,否则图像将无法加载.如果您无法在Web服务器上启用CORS,而您正在加载DICOM P10实例,则可以使用反向代理.这是一个基于http-proxy的简单Node.js,它添加了你可能觉得有用的CORS头文件.
并显示此示例代码,但我使用快递,此代码不起作用
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
});
Run Code Online (Sandbox Code Playgroud)
也可以在这里使用npm cors代码
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')
})
Run Code Online (Sandbox Code Playgroud)
但是有了这个我在端口3000而不是8080上启用了cors,我需要模式来激活或在头响应中添加'Access-Control-Allow-Origin而不是在头请求中,
如何在端口8080上添加CORS,其中dcm4chee从NODEjs运行?
对不起我的英语不好
更新!
服务器响应以下内容;
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
Run Code Online (Sandbox Code Playgroud)
请求头
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
Run Code Online (Sandbox Code Playgroud)
如何在响应头上启用CORS?
Yat*_*ngh 11
做
npm install cors --save
Run Code Online (Sandbox Code Playgroud)
并在您的请求所在的主文件中添加这些行.
const cors = require('cors');
const express = require('express');
let app = express();
app.use(cors());
app.options('*', cors());
Run Code Online (Sandbox Code Playgroud)
要启用 cors,您可以执行以下操作:
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'))
});
Run Code Online (Sandbox Code Playgroud)
请记住,cors 是中间件,因此您需要app.use
在它之前拥有,以便您的传入请求在到达您的路由之前通过 cors。
您可以根据要使用的端口更改端口。我很确定你也可以替换||
with&&
来监听多个端口并在这些端口上设置 cors。
在原始节点中,我相信您必须使用 writeHead,但我不确定原始节点的实现。
将CORS(Cross-Origin-Resource-Sharing) 添加到您的节点,express 应用程序非常容易...
您需要先通过npm安装cors库,使用以下命令:
npm install cors -S
Run Code Online (Sandbox Code Playgroud)
如果您在全球范围内需要它,只需-g
为其添加标志...
然后在您的express 应用程序中,执行以下操作:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
这些也是他们文档中 cors 的其他示例:
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')
})
Run Code Online (Sandbox Code Playgroud)
异步配置 CORS:
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')
})
Run Code Online (Sandbox Code Playgroud)
http://
在我添加请求 url之前,CORS 无法在 localhost 上运行
不工作localhost:3001
工作正常http://localhost:3001
这就是我的工作代码最后的样子
节点侧
var cors = require('cors')
const app = express();
app.use(cors()); // Make sure this line comes right after express()
Run Code Online (Sandbox Code Playgroud)
前端侧
let response = await axios.post("http://localhost:3001/uploadFile", formData);
// the http:// is required cors to work for localhost
Run Code Online (Sandbox Code Playgroud)
浏览器显示的错误是,server localhost:8080 拒绝了来自localhost:3000 的请求,看来cors 在server localhost:8080 上没有设置好。
响应头应该是这样的:
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:*
Run Code Online (Sandbox Code Playgroud)
尝试在您的 8080 服务器中添加 cors 标头。
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");
//...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18454 次 |
最近记录: |