Cloud Functions 최소(Firestore 트리거)
HTTP (요청에 의한) 트리거에 대해서는 여기
전제
구현
최소한의 구현은 대략 아래와 같은 느낌일까.
아래 예제에서는 firestore의 share라는 Collection의 params라는 문서에 대해 create, update, delete 중 하나가 실행되었음을 트리거로 처리(콘솔에 Hello Trigger!로 표시)를 실행합니다. .
index.js
const functions = require('firebase-functions');
exports.helloTrigger = functions.firestore.document('share/params').onWrite((change, context) => {
console.log("Hello Trigger!");
return 0;
});
return 0; 을 넣고 있는 것은 Error: Value for argument "data"is not a valid Firestore document. 라고 하는 에러가 로그에 나오는 것을 막기 위해서입니다.
실행 확인(디버그)
실행
실행은, 다른 프로그램등으로부터 db.collection('share').doc('params').set({color:'red'});등의 더미 커멘드 실행해, 트리거의 대상이 되고 있다 문서를 생성 (업데이트/삭제) 해보십시오.
일일이 테스트를 위해 스크립트 쓰는 것도 번거롭기 때문에 나는 SQL Tabs라는 도구 와 사용해 데이터를 생성시키거나 , 갱신시키거나 하고 있습니다. 별로 복잡한 처리는 할 수 없어 불만도 있지만, 없는 것보다 낫습니다.
console.log()의 출력을 어디에서 확인할까?
HTTP 트리거의 경우, 출력에 에러를 포함하면 디버그할 수 있습니다만, Firestore 트리거의 경우, console.log()를 사용할 필요가 있습니다만, 물론 로컬 콘솔에 출력은 되지 않습니다. 코드의 console.log()는 Firebase 콘솔의 Functions 로그에서 확인할 수 있습니다.
아래와 같은 느낌으로 출력을 확인할 수 있습니다.
또한 return 0;을 넣지 않으면 아래와 같이 Error 로그가 출력됩니다.
조금 응용
나는 한 문서의 변경을 트리거에 다른 DB(RDB라든지)에 필요한 정보를 쓰는 것 같은 처리가 하고 싶다고 생각하고 있으므로, 그것을 의식한 코드를 써 보겠습니다. 그렇다고 해도, 무료로 사용하는 클라우드 SQL 서버가 없기 때문에, 우선 Firestore에 기입해 보겠습니다.
index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.helloTrigger = functions.region('asia-northeast1').firestore.document('share/params').onWrite((change, context) => {
db.collection('logs').add({
param: 'hoge',
after: change.after.data(),
before: change.before.data(),
created_at: admin.firestore.FieldValue.serverTimestamp(),
});
console.log("hoge");
return 0;
});
와일드카드 사용
와일드 카드가 지금 일어났는지 모르기 때문에 확인해 보았습니다.
예를 들어, 다음과 같은 코드를 준비하고,
exports.helloTrigger = functions.region('asia-northeast1').firestore.document('share/{doc_name}').onWrite((change, context) => {
let doc_name = context.params.doc_name;
console.log(doc_name);
console.log(change.after.data());
console.log(change.before.data());
return 0;
});
db.collection('share').doc('params').set({});
실행하면 params가 출력되고,
db.collection('share').doc('configs').set({});
실행하면 configs가 출력됩니다. 즉, db 조작시에 파라미터를 건네주면 그것을 function 측에서 취득할 수 있는 구조인 것 같습니다.
어떤 컬렉션을 모니터링하고 어떤 문서에 어떤 처리가 되었습니까? 등을 알기에는 좋은 것일지도 모른다(반대로, 특정의 문서만을 관련하는 씬이 적은가···).
지금 하나 이해가 부족하기 때문에 계속 탐구하는 것으로.
Reference
이 문제에 관하여(Cloud Functions 최소(Firestore 트리거)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zaburo/items/541449c98ba21704cebb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)