将中间件添加到一行/函数中的所有 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 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据作为子集合添加到firebase颤振中的所有用户文档?

将 Firebase 中的坐标表示为注释 Swift

尝试将 Firebase 中的数据添加到平面列表中

遍历Firebase中节点中的所有节点

将所有数据从Firebase数据库导入Mailchimp

使用 Firebase 函数将实时数据库中的数据发送到电子邮件