拦截firebase函数响应(中间件)



对于我的谷歌助手/Dialogflow项目,我正在尝试拦截我的firebase函数端点发送回Dialogflow的每一个响应。我可以很容易地拦截请求,但响应是在几个函数中构建的(每个Intent有一个函数),我不想在每个函数中都包含一个拦截器。

有没有可能有一个中间件,或者在发送响应时提供一个回调,类似于每个响应的全局拦截器?

我在文档中发现了以下内容:https://firebase.google.com/docs/functions/http-events#use_middleware_modules_with

然而,我不确定这会走向何方。请注意,我不是在使用自定义的express设置,而是直接在firebase上使用本机实现。

serialize()方法在响应返回之前就在会话中被调用,所以你可以做的是扩展会话对象(基于你正在使用的库)并覆盖serialize方法来执行你需要做的任何事情。别忘了调用原始的serialize方法并在新方法中返回值。

由于您将Dialog Flow与Firebase一起用于实现,我希望您也使用actions-on-google包。

CCD_ 2是被调用以生成响应的函数。您可以覆盖此函数并拦截请求和响应。试试这个代码,稍后感谢我。

app.middleware((conv) => {
const serializeCopy = conv.serialize;
conv.serialize = () => {
const response = serializeCopy.call(conv);
console.log(conv.request, response);
return response;
};
});

Cloud Functions不会为HTTP请求或响应公开任何类型的中间件或拦截器。你必须自己构建一些东西,可能是用你自己构建的Express应用程序。您可以在云功能上托管Express应用程序。

我想要类似的东西来拦截所有来回的对话,以便进行日志记录。我最终写了一个函数,用来发送一个对话。例如:

const intercept = (conv, sentence) => {
//My Interceptor code
conv.ask(sentence)
}

现在,每当我想发送响应时,我都会使用:

intercept(conv, "Speak this")

相关内容

  • 没有找到相关文章

最新更新