我正在尝试使用Domino数据服务从NodeJS上运行的Angular应用程序获取Lotus Notes / Domino数据库视图数据。我在多米诺骨牌服务器上设置了网站文档和Internet站点,并在服务器配置中启用了数据。我的角度应用程序和多米诺骨牌数据库在不同的服务器上运行。
当我尝试使用“ http:{host} / {database} / api / data / collections / unid / {unid}”从本地获取数据时,我能够以JSON格式获取数据。但是,当我尝试从我的角度应用程序中获取相同的数据时,却出现了错误:
CORS策略阻止了从来源“ https://localhost:9443”访问“ https:// {host} / {database} / api / data / collections / unid / {unid}”处的XMLHttpRequest:预检请求未通过访问控制检查:所请求的资源上没有“ Access-Control-Allow-Origin”标头
我的Angular应用程序正在端口9443上运行。
我已经搜索了此错误,并尝试了所有尝试,但还没有运气。我在Domino服务器Internet网站文档中添加了所有标头,还启用了所有REST方法(GET,PUT,DELETE等)。但是仍然出现相同的错误。
这是我正在使用的代码,
getDoc() {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({ headers: headers });
this.http.get(url, options).subscribe(
data => console.log(data),
error => console.error(error),
() => { }
)
}
答案 0 :(得分:1)
由于您的Angular应用程序是从其他服务器加载的,因此Domino REST API请求违反了浏览器的Same Origin策略。您应该阅读有关同源起源策略和跨起源资源共享(CORS)的信息。互联网上有很多很好的教程。
但是摘要是您有两个选择:
将Angular应用程序移动到Domino服务器。与大多数HTTP服务器一样,Domino可以轻松托管HTML,CSS和JavaScript文件等静态资源。如果使用这种方法,您的Angular脚本将向相同的源发出REST API请求,并且CORS错误将消失。
在Domino服务器上配置跨源资源共享(CORS)。如果使用的是Domino 10.0.1 FP2,则可以使用新的CORS filter。对于Domino的早期版本,这更加困难。我相信您可以使用网站规则来模拟CORS,但是您必须在此上寻求帮助。
答案 1 :(得分:0)
我建议您看一下AppDev Pack,它允许您使用node.js直接访问Domino数据。
您可以在这里阅读更多内容:
https://doc.cwpcollaboration.com/appdevpack/docs/en/homepage.html
https://turtleblog.info/2018/11/04/deploying-the-appdev-pack-an-admins-guide/
https://turtleblog.info/2018/11/04/using-node-js-to-access-domino/