2013-01-18 6 views
2

저는 AngularJS를 사용하는 웹 응용 프로그램을 사용하여 매우 익숙하지 않습니다.AngularJS를 사용하는 KDB + Process에 대한 HTTP GET 요청

목표는 사용자가 텍스트 필드에 몇 가지 매개 변수를 입력 한 다음 GET 요청의 매개 변수 중 하나 인 매개 변수를 사용하여 GET 요청을 (Angular의 $ http 서비스를 사용하여) 전송하는 것입니다 .

요청 대상은 KDB + 프로세스 (KX 시스템의 독점적 열 기반 데이터베이스/언어)입니다. 이 프로세스는 다음 형식의 요청을받을 수 있습니다.

http://servername:1234/?queryToRunHere[paramFromApp] 

이 호출은 JSON 문자열을 반환해야합니다. 사실 웹 서버와이 프로세스가 다른 포트에서 실행되기 때문에이 쿼리를 다른 포트로 실행하지 못하게하는 "Access-Control-Allow-Origin"오류가 발생합니다. $ HTTP.jsonp 명령을 사용하려고 시도했으나 (원격 읽기를 허용하므로 읽음) "& 콜백"매개 변수를 제공해야합니다. KDB +가 "?"의 오른쪽에있는 모든 것을 해석하기 때문에 불가능합니다. 내부 쿼리로.

내가 진행하는 방법을 정말 잘 모르겠지만,이 지금까지 내 생각은 다음과 같습니다

  1. KDB가 + 자바 (그러나 지금까지 내가 자바 스크립트 알고로)에 대한 API를 제공한다. 아마도 Java로 웹 서비스를 작성할 수 있는데, 이는 각도에 의해 호출 될 수 있으며, 차례로 네이티브 API를 사용하여 KDB +를 호출 할 수 있습니다. 이 문제는 유지 보수 할 또 다른 프로그램을 만들고, 그런 서비스 (기술, 프레임 워크 등)를 작성하는 방법을 모르겠다는 것입니다.

  2. Angular에는 또 다른 방법이 있는데, $ http.jsonp에 콜백 매개 변수를 지정하지 않아도됩니다.

나는 모든 도움에 감사 할 것입니다.

답변

2

이 오류는 일반적으로 다른 서버에서만 발생합니다. 크로스 사이트 스크립팅을 방지하기 위해 일반적인 해결 방법은 아파치 설정에 헤더를 추가하는 것입니다. 두 서비스가 동일한 호스트 이름으로 참조되는지 확인하십시오.

또는 q를 처음 사용하는 경우 까다로울 수도 있지만 원하는 경우 KDB + 응답을 사용자 정의 할 수 있습니다.

  1. .z.ph, 당신은 매개 변수를 처리하고 당신이 원하는대로 반환을 덮어 쓸 수 무엇 HTTP 요청 KDB의 처리를 제어합니다. 예는 KX wiki에서 볼 수 있습니다.

  2. KDB + 3.0 이상에서는 더 유용한 웹 소켓을 제공합니다. 그들은 .z.ws에 의해 처리됩니다.

자바 스크립트에서의 사용의 예

카를로스 집사 ' WebStudio에서 볼 수 있습니다.

이러한 정보는 문제 해결 방법을 제공했기를 바랍니다.

+0

감사합니다! 나는 Q와 함께 꽤 많은 일을 해왔다. 비록 내가 웹에 대한 핸들러 함수를 파고 들지 않았다고 인정한다. 곧 솔루션 3.0으로 업그레이드 할 예정입니다. 2가 가능할 수 있습니다. – user103583

4

브라우저에 동일한 원본 정책이 내장되어 있기 때문에 Access-Control-Allow-Origin 오류가 발생했습니다. 기본적으로 JavaScript 및 서버 API가 동일한 server:port에서 비롯되지 않은 경우이 오류가 발생합니다.이 문제를 해결하려면 서버의 HTTP 응답 헤더에 Access-Control-Allow-Origin을 지정해야합니다.

는 다음을 수행, KDB/Q에서이 작업을 수행하려면 다음과 같이 제안

.z.ph:{ "\r\n" sv ("HTTP/1.1 200 OK"; "Access-Control-Allow-Origin: *"; 
"Content-Type: application/json"; ""; (.j.j select from aTable)) }