将中间件添加到一行/函数中的所有 firebase 函数
Posted
技术标签:
【中文标题】将中间件添加到一行/函数中的所有 firebase 函数【英文标题】:Add middleware to all firebase functions in one line / function 【发布时间】:2021-06-10 00:19:12 【问题描述】:在express
中,您可以添加诸如app.use(cors())
之类的中间件,它将它添加到所有端点,但是我在firebase 示例中找不到类似的东西。 Here is the example(见下文)如何在每个函数中应用它。但是,我想全局应用中间件(cors 或其他),因为我有很多功能。
import * as cors from 'cors';
const corsHandler = cors(origin: true);
export const exampleFunction= functions.https.onRequest(async (request, response) =>
corsHandler(request, response, () => return handler(req, res) );
);
firebase 中的app.use()
是什么? adding and express server 是 only option 吗?
【问题讨论】:
【参考方案1】:使用柯里化来创建处理程序,你必须在所有函数中重复它,但比每次都编写中间件要容易:
const applyMiddleware = handler => (req, res) =>
return cors(req, res, () =>
return handler(req, res)
)
exports.handler = functions.https.onRequest(applyMiddleware(handler))
编辑,更复杂的中间件示例:
const applyMiddleware =
(handler, authenticatedRoute = false = ) =>
(req, res) =>
if (authenticatedRoute)
const isAuthorized = isAuthenticated(req)
if (!isAuthorized)
return res.status(401).send('Unauthorized')
return cors(req, res, () =>
return handler(req, res)
)
exports.handler = functions.https.onRequest(
applyMiddleware(handler, authenticatedRoute: true )
)
【讨论】:
以上是关于将中间件添加到一行/函数中的所有 firebase 函数的主要内容,如果未能解决你的问题,请参考以下文章