Сбой функции облака после изменения времени выполнения на Node.js 10 - PullRequest
2 голосов
/ 27 мая 2020

Я пытаюсь сделать резервную копию firebase через облачную функцию. Когда я использовал Runtime: Node.js 8, функция работала совершенно нормально. Однако, поскольку она скоро устареет, теперь мне нужно использовать Node.js 10. Моя функция fcloud теперь не работает с ошибкой ниже:

Ошибка: не удалось выполнить функцию. Подробности: не удается прочитать свойство charCodeAt из undefined

Подробный журнал ошибок:

2020-05-27 11:01:21.820 IST
firestore_export
8kxlp9s867dy
TypeError: Cannot read property 'charCodeAt' of undefined at peg$parsetemplate (/workspace/node_modules/google-gax/build/src/pathTemplateParser.js:304:17) at Object.peg$parse [as parse] (/workspace/node_modules/google-gax/build/src/pathTemplateParser.js:633:18) at new PathTemplate (/workspace/node_modules/google-gax/build/src/pathTemplate.js:55:54) at segments.forEach.segment (/workspace/node_modules/google-gax/build/src/pathTemplate.js:120:29) at Array.forEach (<anonymous>) at PathTemplate.render (/workspace/node_modules/google-gax/build/src/pathTemplate.js:114:23) at FirestoreAdminClient.databasePath (/workspace/node_modules/@google-cloud/firestore/build/src/v1/firestore_admin_client.js:904:57) at exports.scheduledFirestoreBackup (/workspace/index.js:6:31) at Promise.resolve.then (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:330:28) at process._tickCallback (internal/process/next_tick.js:68:7)
Expand all | Collapse all
{
 insertId: "000000-f688386c-8f2b-4146-aaf7-1fe67c656fa2"  

labels: {…}  
 logName: "projects/firestore-249705/logs/cloudfunctions.googleapis.com%2Fcloud-functions"  
 receiveTimestamp: "2020-05-27T05:31:31.171084310Z"  

resource: {…}  
 severity: "ERROR"  
 textPayload: "TypeError: Cannot read property 'charCodeAt' of undefined
    at peg$parsetemplate (/workspace/node_modules/google-gax/build/src/pathTemplateParser.js:304:17)
    at Object.peg$parse [as parse] (/workspace/node_modules/google-gax/build/src/pathTemplateParser.js:633:18)
    at new PathTemplate (/workspace/node_modules/google-gax/build/src/pathTemplate.js:55:54)
    at segments.forEach.segment (/workspace/node_modules/google-gax/build/src/pathTemplate.js:120:29)
    at Array.forEach (<anonymous>)
    at PathTemplate.render (/workspace/node_modules/google-gax/build/src/pathTemplate.js:114:23)
    at FirestoreAdminClient.databasePath (/workspace/node_modules/@google-cloud/firestore/build/src/v1/firestore_admin_client.js:904:57)
    at exports.scheduledFirestoreBackup (/workspace/index.js:6:31)
    at Promise.resolve.then (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:330:28)
    at process._tickCallback (internal/process/next_tick.js:68:7)"  
 timestamp: "2020-05-27T05:31:21.820Z"  
 trace: "projects/firestore-249705/traces/74e27700d135763bc4e7892ebb1a2333"  
}

Мой индекс. js выглядит следующим образом:

const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();
// Replace BUCKET_NAME
const bucket = 'gs://gcp_firestore_ae2/firestore_export'
exports.scheduledFirestoreBackup = (event, context) => {
  const databaseName = client.databasePath(
    process.env.GCLOUD_PROJECT,
    '(default)'
  );
return client
    .exportDocuments({
      name: databaseName,
      outputUriPrefix: bucket,
      // Leave collectionIds empty to export all collections
      // or define a list of collection IDs:
      // collectionIds: ['users', 'posts']
      collectionIds: ['most_valuable_items','nric_img','pay_slip','pic_of_ofc_entrance'],
    })
    .then(responses => {
      const response = responses[0];
      console.log(`Operation Name: ${response['name']}`);
      return response;
    })
    .catch(err => {
      console.error(err);
    });
};

Ответы [ 2 ]

7 голосов
/ 29 мая 2020

У меня была такая же проблема. Я исправил это, изменив:

process.env.GCLOUD_PROJECT

на мой фактический идентификатор проекта (например, "my_app_37274")

0 голосов
/ 19 августа 2020

У меня была такая же проблема. Похоже, что в предыдущих версиях нам не нужно было GCLOUD_PROJECT в переменной среды, т.е. он автоматически обнаруживает это, но с узла 10 и далее нам нужно передать это явно. Вот как я это решил. Поэтому вместо жесткого кодирования попробуйте передать GCLOUD_PROJECT в переменных среды облачных функций.

Примечание: GCLOUD_PROJECT - это идентификатор проекта, а не имя проекта.

...