【问题标题】:Using Express middleware in Firebase Functions HTTPS requests在 Firebase Functions HTTPS 请求中使用 Express 中间件
【发布时间】:2017-08-16 10:22:58
【问题描述】:

我在使用带有 Firebase 函数的 Express 中间件时遇到问题。在这个example 中,一个函数与 app() 实例挂钩,如下所示:

app.get('*', (req, res) => {
  res.send(`Hello ${req.user.name}`);
});

exports.authorizedHello = functions.https.onRequest(app);

如何使用 express 中间件实现多个功能?

这是我尝试解决的方法之一,但调用端点返回 404:

app.get('/authorizedHello', (request, response) => {
    response.send(`Hello ${request.user.name}`);
})

app.get('/authorizedBye', (request, response) => {
    response.send(`Bye ${request.user.name}`);
})

exports.authorizedHello = functions.https.onRequest(app);
exports.authorizedBye = functions.https.onRequest(app);

我确定我做错了。你能指出我正确的方向吗?

【问题讨论】:

    标签: javascript express firebase google-cloud-functions


    【解决方案1】:

    考虑到云函数的基本路径使用您的导出名称,因此在这种情况下,您的有效 URL 将是:

    https://us-central1-<YOURAPP>.cloudfunctions.net/authorizedHello/authorizedHello
    https://us-central1-<YOURAPP>.cloudfunctions.net/authorizedHello/authorizedBye
    https://us-central1-<YOURAPP>.cloudfunctions.net/authorizedBye/authorizedHello
    https://us-central1-<YOURAPP>.cloudfunctions.net/authorizedBye/authorizedBye
    

    这就是示例使用get('*', ...) 的原因。您应该会在部署命令执行后看到显示的 URL。

    您有四个 URL,因为您将同一个 Express 应用导出了两次。

    【讨论】:

    • 谢谢,指向/authorizedHello/authorizedHello 工作!一个后续问题。有没有办法避免在 api 调用中出现两次函数名?
    • 我建议只做一次类似exports.api = functions.https.onRequest(app); 的事情。或者exports.authorized 然后get('/hello',...) get('/bye', ...)
    • 或者你可以制作两个不同的快递应用程序并允许get('*', ...)。在我的回答中还澄清说,您目前有四个有效的网址。
    【解决方案2】:

    感谢您提出的好问题。你的问题是给我一个使用模板引擎的线索。也许我不在你的问题的主题。但是,如果有人想使用像 Pug 这样的模板引擎,我只想分享。在这里查看我的示例代码。

    const functions = require('firebase-functions');
    const express = require("express");
    const app = express();
    
    
    
    
    app.set("views",__dirname+"/tmp");
    app.set("view engine","pug");
    app.engine('pug', require('pug').__express);
    app.get("/",p3p(p3p.recommended),function(req,res){
       res.render("index");
    });
    app.get("/login",p3p(p3p.recommended),function(req,res){
       res.render("login");
    });
    exports.main = functions.https.onRequest(app);

    然后你就可以像这样访问那个链接了。 https://us-central1-[YOURAPP].cloudfunctions.net/main/ https://us-central1-[YOURAPP].cloudfunctions.net/main/login

    很抱歉打扰您的问题。但我不得不在谷歌上找到我的问题,比如使用“如何使用模板引擎来谷歌云功能”我从来没有得到正确的答案。

    我很高兴因为您的问题中的示例代码。这激励我做一些改进。谢谢你 。 对不起我的英语不好:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2012-03-31
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2020-02-02
      相关资源
      最近更新 更多