在一行/函数中将中间件添加到所有 Firebase 函数

Kev*_*ski 10 javascript node.js firebase google-cloud-functions

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) });
});
Run Code Online (Sandbox Code Playgroud)

app.use()在 firebase 中相当于什么?添加和快递服务器是唯一选择吗?

Kev*_*ski 14

使用柯里化创建处理程序,您必须在所有函数中重复它,但这比每次都编写中间件更容易:

const applyMiddleware = handler => (req, res) => {
  return cors(req, res, () => {
    return handler(req, res)
  })
}
exports.handler = functions.https.onRequest(applyMiddleware(yourHandler))
Run Code Online (Sandbox Code Playgroud)

编辑,一个更复杂的中间件的示例:

const applyMiddleware = handler => (req, res) => {
  return cors(req, res, () => {
    return handler(req, res)
  })
}
exports.handler = functions.https.onRequest(applyMiddleware(yourHandler))
Run Code Online (Sandbox Code Playgroud)