masalibの日記

システム開発、運用と猫の写真ブログです

firebase functions単位にファイル分割

masalib.hatenablog.com

前回、サムネイルをつくるfunctionと翻訳するfunctionを作ったが
2つのfunctionを1つのindex.jsに書くという通常の開発ではありえない事をした
node.jsの初心者なんでトライアンドエラーで分割をした

github.com


いけていない所があります

try {
	admin.initializeApp(functions.config().firebase);
} catch (err) {
	//console.error('Firebase initialization error', err.stack)
}

トライ・アンド・キャッチしている所です

別の所で定義するとエラーでうごかず、
trycathcにしないとデプロイができない

デプロイのエラー

Error: The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once. But if you do want to initialize multiple apps, pass a second argument to initializeApp() to give each app a unique name.
    at FirebaseAppError.FirebaseError [as constructor] (/tmp/fbfn_11222Qg6NpvXGscFd/node_modules/firebase-admin/lib/utils/error.js:25:28)
    at new FirebaseAppError (/tmp/fbfn_11222Qg6NpvXGscFd/node_modules/firebase-admin/lib/utils/error.js:70:23)
    at FirebaseNamespaceInternals.initializeApp (/tmp/fbfn_11222Qg6NpvXGscFd/node_modules/firebase-admin/lib/firebase-namespace.js:38:23)
    at FirebaseNamespace.initializeApp (/tmp/fbfn_11222Qg6NpvXGscFd/node_modules/firebase-admin/lib/firebase-namespace.js:237:30)
    at Object.<anonymous> (/tmp/fbfn_11222Qg6NpvXGscFd/generateThumbnail/index.js:6:8)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/tmp/fbfn_11222Qg6NpvXGscFd/index.js:9:29)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at /usr/lib/node_modules/firebase-tools/lib/triggerParser.js:18:11
    at Object.<anonymous> (/usr/lib/node_modules/firebase-tools/lib/triggerParser.js:32:3)

う~ん・・・
trycatchは最終手段に近いのいずれ治したい


イベントがすべてのフォルダで取得しているみたいなので
そこも特定のフォルダのみのイベントにしたい

module.exports = functions.storage.object().onChange(event => {

今はファイルパスをチェックして処理を終了させている
(間違えているきがする・・・)

  const filePath = event.data.name;
  // filePath uploads以外はサムネイルを作らない
  if (!filePath.startsWith('uploads')) {
    console.log('This is not "uploads/" path.');
    console.log(filePath);
    return;
  }

node.jsの経験がないから、本当に時間がかかる
楽しいからいいですけど〜♪