MarkLogic Grove의 자체 API에서 백엔드 MarkLogic API를 호출하려면 어떻게해야합니까?

Nov 17 2020

이 질문은 아래 질문의 연속입니다.

Marklogic Grove의 node.js에서 REST API를 어떻게 처리합니까?

아래 그림과 같이 Grove에서 인증 할 때 호출 할 수있는 샘플 REST API를 구현할 수있었습니다.

middle-tier / routes / index.js

const authProvider = require('../../grove-node-server-utils/auth-helper');

router.get('/my-rest-api/bar',(req, res) => {
  const response = {status : "success"};
  authProvider.isAuthenticated(req,res,()=>{
    res.send(response);
  });
});

다음으로 my-rest-api 내에서 MarkLogic API를 호출하고 싶습니다. 시행 착오를 거쳐 다음과 같이 썼는데 오류가 발생하는데 어떻게 써야하나요?

middle-tier / routes / index.js

const authProvider = require('../../grove-node-server-utils/auth-helper');
const backend = require('../../grove-node-server-utils/backend');

router.get('/my-rest-api/bar',(req, res) => {
  const myResponse = {status : "success!!"};
  console.log("start");
  const backendOptions = {
    method: 'GET',
    path: '/v1/resources/myMarkLogicAPI?p1=test'
  };

  authProvider.isAuthenticated(req,res,()=>{
    console.log("preprocessing");
    backend.call(req, backendOptions, () => {
      console.log("postprocessing")
      res.send(myResponse);
    });
  });
});

오류 메시지는 { "message": "TypeError : 정의되지 않았거나 null을 개체로 변환 할 수 없습니다."}입니다.

답변

grtjn Nov 17 2020 at 08:27

코드가 backendOptions의 일부로 headers 속성을 기대하고 있다고 생각합니다. 일반적으로 백엔드 호출에 전달하는 인증 헤더를 반환하는 authProvider.getAuth 호출에서 백엔드 호출을 래핑합니다. 백엔드에 액세스 할 수 있는지 확인하기 위해 동일한 작업을 수행 할 수 있습니다.

즉, 이전 질문에서 언급했듯이 새로운 DefaultRestRoute 를 사용하는 것이 더 간단 할 수 있습니다 . 거기에 샘플 코드도 보여주었습니다.

HTH!