我使用NestJS作为我的后端框架和Firebase。
要在HTTP请求中将Nest与Firebase集成,只需将Nest的express实例附加到Firebase:即可
const server: Express = express();
const bootstrap = async (expressInstance: Express) => {
const app = await NestFactory.create(AppModule, expressInstance);
await app.listen(3000);
await app.init();
};
bootstrap(server);
exports.api = functions.https.onRequest(server);
但其他谷歌功能(如pubsub、firestore、auth等(呢?
我正在构建一个订阅应用程序,我依靠functions.pubsub
在每天结束时检查我应该向哪些订阅收费。它需要编写我想在NestJs中编写的业务逻辑。
我正在努力实现这样的目标(简而言之(:
functions.pubsub
.topic('topic')
.onPublish(app.getService(Service).method);
事实证明我非常接近这个解决方案。我不得不使用get
,而不是getService
,就像这样:
const bootstrap = async (expressInstance: Express) => {
const app = await NestFactory.create(AppModule, expressInstance);
await app.init();
return app;
};
const main = bootstrap(server);
export const subscriptions = functions
.pubsub
.topic('cron-topic')
.onPublish((context, message) => main.then(app => {
return app.get(SubscribeService).initDailyCharges(context, message));
});
为独立应用程序找到了一个新的解决方案:https://docs.nestjs.com/standalone-applications
您不需要使用Express服务器引导NestJS来处理PubSub消息。
export const subscriptions = functions
.pubsub
.topic('cron-topic')
.onPublish((context, message) => {
const app = await NestFactory.create(ApplicationModule);
return app.get(SubscribeService).initDailyCharges(context, message);
});