首页 > 解决方案 > 将中间件添加到一行/函数中的所有 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) });
});

firebase中的等价物是什么app.use()添加和快递服务器唯一选择吗?

标签: javascriptnode.jsfirebasegoogle-cloud-functions

解决方案


使用 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 })
)

推荐阅读