Я использую в своем проекте http-функции firebase, и они работают абсолютно хорошо. Когда я попытался повысить производительность, я наткнулся на статью г-на @DougStevenson в среднем на об улучшении производительности холодного запуска за счет лучшей организации облачных функций и использования машинописных скриптов asyn c импорта исходного файла .
Обычный способ написания http-вызовов с использованием express js
const app = express();
app.use(cors({origin: true}));
app.use(express.json());
app.post('/placeOrder', async (request: any, response: any) => {
//something
});
//export this constant in index.ts
export const order = functions
.region('asia-east2')
.https
.onRequest(app);
Предложение @DougStevenson по улучшению производительности холодного запуска
Index.ts
export const httpFn = functions.https.onRequest(async (request, response) => {
await (await import('./fn/httpFn')).myFun(request, response)
})
Исходный файл
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()
export const myFun = async ( request: functions.https.Request
, response: functions.Response): Promise<void> => {
const snapshot = await getDocument()
const data = snapshot.data()
response.send(data)
}
Оба работают абсолютно хорошо. Но когда я попытался использовать тот же подход с Express. js, используя http post и get call, асинхронно загрузив исходный файл, я не смог это сделать, и я не могу найти похожие примеры в моем поиске.
Я пробовал
Index.ts
export const userOrder = functions.https.onRequest(async (request, response) => {
await (await import('./order')).default(request, response)
});
order.ts
const express = require('express');
const app = express();
app.use(express.json());
app.get('/getOrder', async (request: any, response: any) => {
response.status(200).send('It works!');
});
app.post('/createOrder', async (req: any, res: any) => {
//something
});
export default app;
Но этот не работает, и я хотел бы чтобы узнать, как использовать импорт asyn c в Typescript для развертывания express js конечных точек в облачных функциях.
Спасибо.