使用 Angular 7 对 POST 使用 HTTP API 并且缺少命令错误 headers
With Angular 7 use HTTP API for POST and command error headers missing
我用的是Angular7和Orientdb 3.0.14。
我想连接到本地主机中的数据库 demodb。
这是我的命令代码:
command(statement: string, success: (data: any) => void, error: (err: any) => void): void {
this.url = this.url + 'sql/-/-1';
this.headers = new HttpHeaders()
.set('Access-Control-Allow-Origin', 'http://localhost:4200')
.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, DELETE')
.set('Access-Control-Max-Age', '3600')
.set('Access-Control-Allow-Credentials', 'true')
.set('Access-Control-Allow-Headers', 'Content-Type, authorization')
.set('Authorization', 'Basic ' + btoa(this.username + ':' + this.password))
.set('Content-Type', 'application/json');
console.log(this.headers);
this.http.post(this.url,
JSON.stringify({'command': statement}),
{headers: this.headers})
.toPromise()
.then(success)
.catch(error);
但是我在控制台上有这个错误:
HttpHeaders {normalizedNames: Map(0), lazyUpdate: Array(7), headers:
Map(0), lazyInit: HttpHeaders}headers:
Map(7)size: (...)proto:
Map[[Entries]]:
Array(7)0: {"access-control-allow-origin" =>
Array(1)}key: "access-control-allow-origin"value:
["http://localhost:4200"]1: {"access-control-allow-methods" =>
Array(1)}key: "access-control-allow-methods"value: ["POST, GET,
OPTIONS, DELETE"]
2: {"access-control-max-age" => Array(1)}key:
"access-control-max-age"value: ["3600"]
3:{"access-control-allow-credentials" => Array(1)}key:
"access-control-allow-credentials"value: ["true"]
4:{"access-control-allow-headers" => Array(1)}key:
"access-control-allow-headers"value: ["Content-Type, authorization"]
5:{"authorization" => Array(1)}key: "authorization"value: ["Basic
YWRtaW46YWRtaW4="]
6: {"content-type" => Array(1)}key:
"content-type"value: ["application/json"]length: 7lazyInit:
nulllazyUpdate: nullnormalizedNames:
Map(7) {"access-control-allow-origin" =>
"Access-Control-Allow-Origin", "access-control-allow-methods" =>
"Access-Control-Allow-Methods", "access-control-max-age" =>
"Access-Control-Max-Age", "access-control-allow-credentials" =>
"Access-Control-Allow-Credentials", "access-control-allow-headers" =>
"Access-Control-Allow-Headers", …}
proto: Object core.js:16819
Angular is running in the development mode. Call enableProdMode() to
enable the production mode. localhost/:1 Access to XMLHttpRequest at
'http://localhost:2480/command/demodb/sql/-/-1' from origin
'http://localhost:4200' has been blocked by CORS policy: Response to
preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' header is present on the requested
resource.
看到 Access-Control_allow-Origin 进入 header..但未被 OriendDB 接受
你能帮帮我吗?
谢谢。
在 OrientDB 中,默认情况下不启用 CORS,您尝试实现的方式也无济于事。
在 config/orientdb-server-config.xml
中添加此条目
<parameter name="network.http.additionalResponseHeaders" value="Access-Control-Allow-Origin: * ;Access-Control-Allow-Credentials: true;Access-Control-Allow-Headers: Content-Type;Access-Control-Allow-Methods: POST, GET, DELETE, HEAD, OPTIONS, PATCH, CONNECT, TRACE " />
以上
<parameter value="utf-8" name="network.http.charset"/>
同样重要的是不要在冒号后使用 space ;
我用的是Angular7和Orientdb 3.0.14。 我想连接到本地主机中的数据库 demodb。
这是我的命令代码:
command(statement: string, success: (data: any) => void, error: (err: any) => void): void {
this.url = this.url + 'sql/-/-1';
this.headers = new HttpHeaders()
.set('Access-Control-Allow-Origin', 'http://localhost:4200')
.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, DELETE')
.set('Access-Control-Max-Age', '3600')
.set('Access-Control-Allow-Credentials', 'true')
.set('Access-Control-Allow-Headers', 'Content-Type, authorization')
.set('Authorization', 'Basic ' + btoa(this.username + ':' + this.password))
.set('Content-Type', 'application/json');
console.log(this.headers);
this.http.post(this.url,
JSON.stringify({'command': statement}),
{headers: this.headers})
.toPromise()
.then(success)
.catch(error);
但是我在控制台上有这个错误:
HttpHeaders {normalizedNames: Map(0), lazyUpdate: Array(7), headers: Map(0), lazyInit: HttpHeaders}headers:
Map(7)size: (...)proto: Map[[Entries]]:
Array(7)0: {"access-control-allow-origin" => Array(1)}key: "access-control-allow-origin"value: ["http://localhost:4200"]1: {"access-control-allow-methods" =>
Array(1)}key: "access-control-allow-methods"value: ["POST, GET, OPTIONS, DELETE"]
2: {"access-control-max-age" => Array(1)}key: "access-control-max-age"value: ["3600"]
3:{"access-control-allow-credentials" => Array(1)}key: "access-control-allow-credentials"value: ["true"]
4:{"access-control-allow-headers" => Array(1)}key: "access-control-allow-headers"value: ["Content-Type, authorization"]
5:{"authorization" => Array(1)}key: "authorization"value: ["Basic YWRtaW46YWRtaW4="]
6: {"content-type" => Array(1)}key: "content-type"value: ["application/json"]length: 7lazyInit: nulllazyUpdate: nullnormalizedNames: Map(7) {"access-control-allow-origin" => "Access-Control-Allow-Origin", "access-control-allow-methods" => "Access-Control-Allow-Methods", "access-control-max-age" => "Access-Control-Max-Age", "access-control-allow-credentials" => "Access-Control-Allow-Credentials", "access-control-allow-headers" => "Access-Control-Allow-Headers", …}
proto: Object core.js:16819 Angular is running in the development mode. Call enableProdMode() to enable the production mode. localhost/:1 Access to XMLHttpRequest at 'http://localhost:2480/command/demodb/sql/-/-1' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
看到 Access-Control_allow-Origin 进入 header..但未被 OriendDB 接受
你能帮帮我吗? 谢谢。
在 OrientDB 中,默认情况下不启用 CORS,您尝试实现的方式也无济于事。
在 config/orientdb-server-config.xml
<parameter name="network.http.additionalResponseHeaders" value="Access-Control-Allow-Origin: * ;Access-Control-Allow-Credentials: true;Access-Control-Allow-Headers: Content-Type;Access-Control-Allow-Methods: POST, GET, DELETE, HEAD, OPTIONS, PATCH, CONNECT, TRACE " />
以上
<parameter value="utf-8" name="network.http.charset"/>
同样重要的是不要在冒号后使用 space ;