작성
·
184
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
설명해주신 싱글톤? 방식말고 평소에 사용하는 방식으로 바꿔봤는데 맞는지 검사가능할까요??
hello.ts
import { NextApiRequest, NextApiResponse } from 'next';
const admin = require('../../model/firebase_admin');
export default function handler(_: NextApiRequest, res: NextApiResponse) {
const db = admin.firestore();
db.collection('test');
res.status(200).json({ name: 'John Doe' });
}
modle/firebase_admin.ts
const admin = require('firebase-admin');
interface Config {
credentials: {
privateKey: string;
clientEmail: string;
projectId: string;
};
}
if (!admin.apps.length) {
const config: Config = {
credentials: {
projectId: process.env.projectId || '',
clientEmail: process.env.clientEmail || '',
privateKey: process.env.privateKey?.replace(/\\n/g, '\n') || '',
},
};
admin.initializeApp({
credential: admin.credential.cert(config.credentials),
});
console.info('bootstrap firebase admin');
}
module.exports = admin;
현재 firestore만 hello.ts에서 test 보내는 방식만 따라해봤습니다!
질문 1. 이 방식으로 사용해도 될까요??
이 방식으로 문제될게 있을까요?
질문 2. 아래 코드가 출력이 안되는데 이유가 있을까요?
console.info('bootstrap firebase admin');
위 전체코드에서처럼 if문안에 작성하게되면 콘솔이 영상처럼 터미널에 안뜨는데 왜그런걸까요?
if문 밖에 선언하면 잘 출력됩니다.
답변 1
0
안녕하세요 oriori2705님!
작성해주신 코드 잘 동작할듯해요.
admin에 앱이 있는지 체크하는 부분이 있잖아요.
if (!admin.apps.length) {
다만, 이 코드는 require로 가져오도록 하는데요.
이게 여러 파일에 걸쳐있을 때, 어플리케이션이 실행되면 한번만 init 이 되는지 확인해봐야겠네요.
2번 질문은 admin.apps.length가 어떤 값을 가지는지 확인해보셔야할 듯하네요.
if 문안에서 동작안한다면 if문 코드가 실행되지 않았을 가능성이 있어요.