javascript - 将中间件添加到一行/函数中的所有 firebase 函数
问题描述
express
您可以添加中间件,例如将其添加到所有端点,但是我在app.use(cors())
firebase 示例中找不到类似的东西。这是如何在每个函数中应用它的示例(见下文)。但是我想全局应用中间件(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) });
});
解决方案
使用 currying创建处理程序,您必须在所有函数中重复它,但它比每次编写中间件更容易:
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 })
)
推荐阅读
- android - 退出应用程序时如何删除我的应用程序缓存?
- android - 如何让后退按钮正确反转片段之间的过渡动画?
- python - python中高效的在线线性回归算法
- javascript - JavaScript:为什么控制台不被视为标准的内置对象?
- php - laravel eloquent ->whereHas - 编写你自己的存在(子查询)
- python-3.x - 启动实例时出现 Amazon EC2 错误 已达到最大 VPC 数
- bitbucket - 无法将 Git 存储库克隆到源树中,登录屏幕不断出现
- android - 如何从视频 URL 获取视频缩略图作为 GIF?
- azure - Azure CDN - 以某种方式截断“大文件”?
- java - 两棵树中的等于方法