【发布时间】:2017-08-25 03:48:15
【问题描述】:
我正在尝试使用 NODEJS 显示 dicom,但浏览器向我抛出了这个问题
XMLHttpRequest 无法加载 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。在 'Access-Control-Allow-Origin' 中,请求的资源上存在标头。来源 'http://localhost:3000' 是 因此不允许访问。
然后安装 npm 包 cors
在这里,我将我的代码部分留在我的代码 app.js 中
Var express = require ('express');
Var cors = require ('cors')
App.use (cors ())
App.listen (3000, function () {
Console.log ('listening on 3000')
})
也可以尝试在 app.js 中添加它
App.use (function (req, res, next) {
Res.header ("Access-Control-Allow-Origin", "*");
Res.header ("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
Next ();
});
但是浏览器还是显示错误:
XMLHttpRequest 无法加载 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。在 'Access-Control-Allow-Origin' 中,请求的资源上存在标头。来源 'http://localhost:3000' 是 因此不允许访问。
我有疑问,因为我也使用了我留在这里的路由 index.js
var express = require('express');
var router = express.Router();
var cors = require('cors')
/*var express = require('express');
var router = express.Router();*/
var mysql = require('mysql');
router.use(cors({origin: 'http://localhost:3000'}));
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
对不起我的英语
【问题讨论】:
-
如果你的服务器正在监听 3000 端口,什么在监听 8080?
-
问题中引用的错误消息表明端口 8080 服务器(无论它是什么......)是您需要配置以返回 Access-Control-Allow-Origin 等响应标头的服务器。无论您在端口 3000 服务器上执行何种 CORS 配置,就修复该错误而言都不会产生任何影响。因为那个 3000 端口的服务器是发送跨域请求的服务器,对吧? CORS 配置需要在接收跨域请求的服务器上设置。
-
我的 NODEJS 应用程序在端口 3000 上运行,dcm4chee 使用 WADO 服务来让 DICOM 在端口 8080 上运行;也尝试像这样使用指向 8080 的 cors:app.use (cors ({origin: 'http: // localhost: 8080'})) 但浏览器仍然响应同样的问题
-
你能给我一些如何配置 cors 的例子吗?拜托,dcm4chee 是在端口 8080 上运行的那个,是提供 dicom 的那个,而我在 NODEJS 中的应用程序在端口 3000 上运行的是接收 dicom 的那个。
-
@M.Node 详细信息在我添加的答案中。基本上除非您知道如何配置 Dcm4chee 服务器以发送 Access-Control-Allow-Origin 响应标头,否则您需要在两者之间放置一个代理并使用它。