1세대와 마찬가지로 onRequest()
핸들러를 사용하여 HTTP 요청을 통해 함수를 트리거할 수 있습니다. 이렇게 하면 GET
, POST
, PUT
, DELETE
, OPTIONS
등 지원되는 HTTP 메서드를 통해 함수를 호출할 수 있습니다.
추가 HTTP 옵션
옵션 | 설명 |
---|---|
region |
HTTP 함수는 단일 리전과 여러 리전을 지정할 수 있습니다. 여러 리전이 지정되면 리전별로 별도의 함수 인스턴스가 배포됩니다. |
timeoutSeconds |
HTTP 함수에서 최대 1시간의 제한 시간을 지정할 수 있습니다. |
cors |
HTTP 함수가 CORS 정책을 지정할 수 있습니다. true 로 설정하면 모든 출처가 허용되고, string , regex , array 를 설정하면 허용된 출처를 지정할 수 있습니다. 명시적으로 설정하지 않으면 기본값은 false/CORS 정책 없음입니다. |
CORS 구성(교차 출처 리소스 공유)
cors
옵션을 사용하여 함수에 액세스할 수 있는 출처를 관리하세요. 기본적으로 HTTP 함수에는 CORS가 구성되어 있지 않습니다. 즉, 함수에 관한 교차 출처 요청으로 인해 이 오류가 발생합니다.
request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
함수의 cors
옵션을 false
로 설정하여 CORS를 명시적으로 사용 중지할 수도 있습니다.
일부 교차 출처 요청만 허용하려면 허용하는 특정 도메인 또는 정규 표현식의 목록을 전달하면 됩니다. 예를 들어 개발자가 firebase.com
및 flutter.com
도메인을 소유한 경우, firebase.com
에 여러 하위 도메인이 있을 수 있으므로 cors
옵션을 [/firebase\.com$/, 'flutter.com']
으로 설정하는 것이 좋습니다.
함수를 공개적으로 사용할 수 있어야 하는 경우(예: 공개 API 또는 웹사이트를 제공하는 경우) cors
정책을 true
로 설정하세요.
HTTP 요청으로 함수 트리거
firebase-functions/v2/https
하위 패키지의 onRequest()
를 사용하여 HTTP 이벤트를 처리하는 함수를 만듭니다.
onRequest()
이벤트는 Express 웹 프레임워크로 관리되는 라우터와 앱을 지원합니다.
이 페이지의 예시는 함수 엔드포인트로 HTTP GET
요청을 보낼 때 트리거되는 시간 서버 샘플을 기반으로 합니다. 샘플 함수는 현재 서버 시간을 가져오고, URL 쿼리 매개변수에 지정된 대로 시간 형식을 지정하고, HTTP 응답으로 결과를 보냅니다.
Express 요청 및 응답 객체 사용
onRequest()
의 인수로 사용되는 요청 객체는 클라이언트에서 보낸 HTTP 요청의 속성에 대한 액세스 권한을 부여하고 응답 객체는 클라이언트로 응답을 다시 보내는 방법을 제공합니다.
exports.date = onRequest( {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]}, (req, res) => { // ... });
기존 Express 앱 사용
App을 onRequest()
의 인수로 사용하면 전체 Express 앱을 HTTP 함수에 전달할 수 있습니다.
const { onRequest } = require('firebase-functions/v2/https');
const express = require('express');
const app = express();
// Add middleware to authenticate requests
app.use(myMiddleware);
// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));
// Expose Express API as a single Cloud Function:
exports.widgets = onRequest(app);
HTTP 함수 호출
HTTP 함수를 배포한 후 함수의 고유 URL을 통해 함수를 호출할 수 있습니다. 배포 후 CLI의 정확한 URL 출력을 사용합니다.
예를 들어 date()
를 호출하는 URL은 다음과 같습니다.
https://date-<random-hash>-<region>.a.run.app
Express 앱 라우팅에서는 정의한 앱의 URL 경로에 함수 이름이 프리픽스로 추가됩니다.
요청의 값 읽기
date()
함수 예시에서는 함수가 URL 매개변수와 본문에서 모두 format
값을 테스트하여 사용할 날짜 및 시간 형식을 설정합니다.
let format = req.query.format; format = req.body.format;
HTTP 함수 종료
항상 send()
, redirect()
또는 end()
로 HTTP 함수를 종료합니다. 그렇지 않으면 함수가 계속 실행되고 시스템에 의해 강제로 종료될 수 있습니다. 동기, 비동기, 프로미스도 참조하세요.
Node.js moment
모듈을 사용하여 서버 시간을 가져오고 형식을 지정한 후 date()
함수가 HTTP 응답으로 결과를 전송하며 종료됩니다.
const formattedDate = moment().format(`${format}`); logger.log("Sending formatted date:", formattedDate); res.status(200).send(formattedDate);
Firebase 호스팅 통합
Firebase 호스팅에 HTTP 함수를 연결할 수 있습니다. Firebase 호스팅 사이트상의 요청은 특정 HTTP 함수로 프록시 처리될 수 있습니다. 이를 통해 HTTP 함수로 커스텀 도메인을 사용할 수도 있습니다. Firebase 호스팅에 Cloud Functions 연결에 대해 자세히 알아보세요.