Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何设置自定义云函数路径_Node.js_Firebase_Google Cloud Functions - Fatal编程技术网

Node.js 如何设置自定义云函数路径

Node.js 如何设置自定义云函数路径,node.js,firebase,google-cloud-functions,Node.js,Firebase,Google Cloud Functions,假设我希望云函数具有如下路径: 如何在节点中实现“login/”部分 或者更复杂的事情,比如 登录/管理/获取数据 ? 我试着用 module.exports = { "login/change_password" = [function] } 但我在部署时出错,并且忽略了“更改密码”,所以它只尝试部署“登录”功能 我尝试过的另一件事是使用快速路由器,但结果只部署了一个函数,该函数被路由到正确的路径(例如myfunction/login/change_password),这是有问题的

假设我希望云函数具有如下路径:

如何在节点中实现“login/”部分

或者更复杂的事情,比如

登录/管理/获取数据

?

我试着用

module.exports = {
    "login/change_password" = [function]
}
但我在部署时出错,并且忽略了“更改密码”,所以它只尝试部署“登录”功能


我尝试过的另一件事是使用快速路由器,但结果只部署了一个函数,该函数被路由到正确的路径(例如myfunction/login/change_password),这是有问题的,因为我每次都要批量部署,不能单独部署一个函数。

如果您希望灵活地定义路由(路径)这比函数的名称更复杂,您应该提供一个Express app to Cloud函数。express应用程序可以定义将路径组件添加到从index.js导出的函数的基本名称的路由。本节将对此进行讨论。例如:

const functions = require('firebase-functions');
const express = require('express');
const app = express();
app.get('/some/other/path', (req, res) => { ... });
exports.foo = functions.https.onRequest(app);
在这种情况下,所有路径都将挂起路径前缀“foo”


还有一个官方示例演示了Express应用程序的使用:

感谢与Doug Stevenson的讨论,我能够更好地表达我的问题,并且发现问题已经得到了回答

因此,这将是我实施的一个示例:

const functions = require('firebase-functions');
const express = require('express');
const login = require('./login.js');
const edit_data = require('./edit-data.js');

const login_app = express();
login_app.use('/get_uuid', login.getUUID);
login_app.use('/get_credentials', login.getCredentials);
login_app.use('/authorize', login.authorize);

const edit_data_app = express();
edit_data_app.use('/set_data', edit_data.setData);
edit_data_app.use('/get_data', edit_data.getData);
edit_data_app.use('/update_data', edit_data.updateData);
edit_data_app.use('/remove_data', edit_data.removeData);

exports.login = functions.https.onRequest(login_app);
exports.edit_data = functions.https.onRequest(edit_data_app);
我的收获是有一个一对一的Express应用程序到HTTP函数通信,所以如果我想有3个不同的函数,我需要3个Express应用程序

一个很好的平衡是每个模块有一个应用程序和一个函数(如上所示),这也意味着您可以跨多个模块/javascript文件分离出您的函数,以便于维护

在上面的示例中,我们可以使用

https://[DOMAIN]/login/get\u uuid/

或者,从firebase函数外壳


login.get(“/get_uuid”)

谢谢你,道格,我注意到我在编辑这个问题时尝试过(目前实际上正在使用)这种方法。我遇到的问题是,它将所有应用程序的路径都压缩到一个单一的功能中,如果我只对一个路径进行了更改,部署起来会很慢。理想情况下,每条路线都是一个功能,但这意味着要设置几个express应用程序?有什么慢的?用一个Express应用程序部署一个功能(即使有多条路线)几乎总是比部署多个功能更快,每个功能都有自己的应用程序(你可以这样做,但我认为这不值得)。事实上,我并不认为向函数中添加Express会大大降低部署速度。我有一个测试项目,我用“常规”的方式创建了几个函数(exports.date=functions.https.onRequest((req,res)=>{/…});)并且比只使用一个函数路由到不同的路由来部署我的项目要快(对不起,我没有想到方便)。比如说,我改变了twitter/登录路径,我不想重新部署主功能及其所有路径,我只想重新部署twitter/登录功能,但在我的情况下,我不能,除非我遗漏了什么。请发布一个新问题,说明你后续关注的问题,解释什么没有按照你预期的方式工作,实际上,我根据您的输入完善了我的搜索条件,并找到了有关堆栈溢出的答案(顺便说一句,您也回答了这个问题),所以我详细介绍了答案和我的最终方法。再次感谢!