Hello world 示例
此示例通过响应“Hello, World!”来处理 HTTP GET 请求。
// lib/functions.dart
import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';
@CloudFunction()
Response function(Request request) => Response.ok('Hello, World!');
在您自己的机器上模拟托管环境
您可以使用 Docker 在自己的机器上运行此函数示例,以模拟在托管环境中运行。
$ docker build -t hello .
...
$ docker run -it -p 8080:8080 --name app hello
Listening on :8080
从另一个终端
curl https://:8080
Hello, World!
如果您想知道创建的映像的大小,请输入
$ docker image ls hello
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest 3f23c737877b 1 minute ago 11.6MB
编辑函数并在本地测试
如果您想将处理函数(function)重命名为其他名称(例如:handleGet),您需要确保 FUNCTION_TARGET 环境变量已设置为新的函数名称。
例如
@CloudFunction()
Response handleGet(Request request) => Response.ok('Hello, World!');
运行 build_runner 以从 lib/functions.dart 重新生成 bin/server.dart
$ dart run build_runner build
[INFO] Generating build script completed, took 304ms
[INFO] Reading cached asset graph completed, took 46ms
[INFO] Checking for updates since last build completed, took 412ms
[INFO] Running build completed, took 2.2s
[INFO] Caching finalized dependency graph completed, took 28ms
[INFO] Succeeded after 2.3s with 1 outputs (1 actions)
运行测试(请注意,现在必须为测试进程设置 FUNCTION_TARGET)
$ FUNCTION_TARGET=handleGet dart test
00:02 +1: All tests passed!
在您的系统上运行它
$ FUNCTION_TARGET=handleGet dart run bin/server.dart
Listening on :8080
如果您想在您的机器上托管测试此功能,请重新构建映像
$ docker build -t hello .
...
如果您之前运行过容器,请确保现在将其移除。假设您已将容器命名为 app(如前所述)
docker rm -f app
现在启动另一个容器,同时确保将环境变量传递给 Docker,以便为容器化函数设置它
$ docker run -it -p 8080:8080 --name app -e 'FUNCTION_TARGET=handleGet' hello
App listening on :8080
清理
完成后,通过输入以下命令进行清理
docker rm -f app # remove the container
docker image rm hello # remove the image
Makefile
如果您熟悉 make 并且它在您的路径中,您可以使用提供的 Makefile 在本地开发和测试您的源代码,直到准备好在容器中测试或部署它。支持以下目标
make build– 这是默认目标,它将生成bin/server.dartmake clean– 清除 build_runner 缓存并删除bin/server.dartmake test– 运行clean和build目标,然后运行测试make run– 运行build目标,然后在本地启动 Dart 函数服务器