Node.js 如何设置自定义云函数路径
假设我希望云函数具有如下路径: 如何在节点中实现“login/”部分 或者更复杂的事情,比如 登录/管理/获取数据 ? 我试着用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),这是有问题的
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/登录功能,但在我的情况下,我不能,除非我遗漏了什么。请发布一个新问题,说明你后续关注的问题,解释什么没有按照你预期的方式工作,实际上,我根据您的输入完善了我的搜索条件,并找到了有关堆栈溢出的答案(顺便说一句,您也回答了这个问题),所以我详细介绍了答案和我的最终方法。再次感谢!