如何在Firebase云功能中将数据从Firestore数据库触发器发送到Elastic搜索索引

时间:2018-11-19 05:21:55

标签: elasticsearch google-cloud-firestore google-cloud-functions

我正在使用Fire-store作为我的应用程序的数据库,并使用云功能将数据发送到Elastic搜索服务器,但出现错误

StatusCodeError: 400 - {"error":{"root_cause":[{"type":"parse_exception","reason":"request body is required"}],"type":"parse_exception","reason":"request body is required"},"status":400} at new StatusCodeError (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/errors.js:32:15) at Request.plumbing.callback (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/plumbing.js:104:33) at Request.RP$callback [as _callback] (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/plumbing.js:46:31) at Request.self.callback (/user_code/node_modules/request/request.js:185:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request.<anonymous> (/user_code/node_modules/request/request.js:1161:10) at emitOne (events.js:96:13) at Request.emit (events.js:188:7) at IncomingMessage.<anonymous> (/user_code/node_modules/request/request.js:1083:12) at IncomingMessage.g (events.js:292:16) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:80:11) at process._tickDomainCallback (internal/process/next_tick.js:128:9)

下面是我的云功能

exports.indexCoachingToElastic = functions.firestore.document('cities/{city}/coachings/{coaching_id}')
.onWrite((change, context) =>{

const postData = change.after.data;
const coaching_id =   context.params.coaching_id;
const elasticSearchConfig = functions.config().elasticsearch;
const elasticSearchUrl = elasticSearchConfig.url + 'coachings/coaching/'+coaching_id;
const elasticSearchMethod = postData ?'POST':'DELETE';
console.log(elasticSearchUrl,elasticSearchConfig.username);

  const elasticSearchRequest = {
      method: elasticSearchMethod,
      url: elasticSearchUrl,
      auth:{
        username: elasticSearchConfig.username,
        password : elasticSearchConfig.password,
    },
    body: postData,
    json: true
  };
  return request(elasticSearchRequest).then((response) =>{
        console.log("ElasticSerch response",response);
  });
});

我知道我使用了json = true,但是firestore数据库不是json,但是在这种情况下我不知道要做什么。

0 个答案:

没有答案