Comment appeler l'API MarkLogic backend à partir de ma propre API dans MarkLogic Grove?

Nov 17 2020

Cette question fait suite à la question ci-dessous.

Comment gérer l'API REST dans node.js dans Marklogic Grove?

J'ai pu implémenter un exemple d'API REST qui peut être appelé lors de l'authentification avec Grove, comme indiqué ci-dessous.

niveau intermédiaire / 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);
  });
});

Ensuite, je souhaite appeler l'API MarkLogic à partir de my-rest-api. J'ai écrit ce qui suit par essais et erreurs, mais une erreur se produit, comment dois-je l'écrire?

niveau intermédiaire / 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);
    });
  });
});

Le message d'erreur est: {"message": "TypeError: Cannot convert undefined or null to object"}

Réponses

grtjn Nov 17 2020 at 08:27

Je soupçonne que le code attend une propriété headers dans le cadre de backendOptions. Nous encapsulons généralement l'appel backend dans un appel authProvider.getAuth qui renvoie un en-tête d'authentification que nous transmettons à l'appel backend. Vous voudrez peut-être faire de même pour vous assurer que vous êtes autorisé à accéder au backend.

Cela dit, il peut être plus simple d'utiliser notre nouveau DefaultRestRoute comme mentionné dans votre question précédente. J'ai également montré un exemple de code.

HTH!