【问题标题】:Add middleware to all firebase functions in one line / function将中间件添加到一行/函数中的所有 firebase 函数
【发布时间】: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 serveronly option 吗?

【问题讨论】:

    标签: javascript node.js firebase google-cloud-functions


    【解决方案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 })
    )
    

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2013-03-15
      • 2020-09-06
      • 1970-01-01
      • 2016-09-20
      • 2018-08-12
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多