首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart函数框架使用

Dart函数框架使用
EN

Stack Overflow用户
提问于 2021-08-30 09:11:15
回答 1查看 166关注 0票数 5

我对Dart函数框架很陌生。我的目标是使用这个包创建多个函数,并将它们部署到云运行(与Firebase相结合,但我想这与这个问题无关)。

我已经运行了快速启动,并阅读了文档中的所有内容。

快速启动一次只提到一个函数(例如Hello WorldCloud Events等),如下所示:

代码语言:javascript
复制
import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';

@CloudFunction()
Response function(Request request) {
    return Response.ok('Hello, World!');
}

但是,正如您在快速启动中所看到的,一次只处理一个项目中的一个函数。我想要部署几个功能怎么样?我是否应该:

  1. 在同一个项目/文件中编写多个函数,以便函数框架自行编译'server.dart`‘

  1. 为每个函数创建不同的functions_framework

让我说得更具体些。我是否应该这样做(选项1-这对我来说更有意义):

代码语言:javascript
复制
import 'dart:math';

import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';

@CloudFunction()
Response function(Request request) {
    return Response.ok('Hello, World!');
}

@CloudFunction()
Response function2(Request request) {
  if (Random().nextBool()) {
    return Response.ok('Hello, World!');
  } else {
    return Response.internalServerError();
  }
}

还是应该为项目中所需的每个函数运行一个build_runner来构建一个不同的文件夹?

是否有区别和/或最佳做法?提前谢谢。

编辑。这个问题与云运行本身的部署有关,而不仅仅是在我自己的PC上进行测试。为了测试我自己的函数,我执行了以下操作:

  1. 运行dart run build_runner build,以便它正确地更新server.dart文件(我可以看到框架在幕后做了很多事情,_nameToFunctionTarget基本上是一个路由器);
  2. 在两个不同的终端中运行服务器,如:dart run bin/server.dart --port MYPORT --target MYFUNCTION ( MYPORTMYFUNCTION分别为8080/8081function/function2 )。

我想我只是搞不懂如何正确管理这个框架,一旦部署到云运行上。

编辑2. --我刚刚放弃使用Dart作为无服务器语言,甚至是后端语言。即使是基本的东西,也有太多的行话。任何后端框架要么是死的,要么是由一个狂热的家伙维护的(道具给他!)这种语言还没有从Google团队/社区中得到足够的喜爱,在这个时候,基本上不可能在仅仅是Dart上进行完全的叠加。这是个梦,但现在不可能实现。此外,Dart几乎没有一个合适的SDK来使用Firestore等等,因此Firebase不是一个选项。我发现学习NodeJS和利用用NodeJS编写的Firebase函数的Firebase支持就更容易了,如果将来会有更多的支持的话,我会在那里等待更多的支持。

EN

回答 1

Stack Overflow用户

发布于 2021-12-29 23:13:00

文档现在有点稀疏(而且我也是新手!)我找不到任何好的例子,所以这里……)

  • 您只能有一个被服务的函数。它应该被命名为'function‘(类型和名称可以被覆盖,参见cloudevent示例dartfn generate cloudevent)
  • 您可以部署其中的许多,以便每个人都执行特定的任务,例如处理上面的云端,但是大多数人都希望得到更多的休息(参见下一篇)。
  • 您需要附加一个Router(),以便代码中的特定逻辑处理单个入口点(函数)。

休息的例子

  1. 添加到pubspec.yaml (在依赖项中:) shelf_router: ^1.1.2
  2. 委托@CloudFunction使用Router()

functions.dart

代码语言:javascript
复制
import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';

Router app = Router()
  ..get('/health', (Request request) {
    return Response.ok('healthy');
  })
  ..get('/user/<user>', (Request request, String user) {
    // fetch the user... (probably return as json)
    return Response.ok('hello $user');
  })
  ..post('/user', (Request request) {
    // convert request body to json and persist... (probably return as json)
    return Response.ok('saved the user');
  });

@CloudFunction()
Future<Response> function(Request request) => app.call(request);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68981552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档