如何使用 Netlify Lambda 函数,为 JAMstack 网站添加动态处理功能

之前我在我的Netlify教程中写到了Netlify。我使用它来托管这个博客,而且效果非常好。

我还使用它来运行其他网站,而且所有的网站都是基于 Hugo 构建的 - 这使得我的堆栈100%基于JAMstack

JAM 的有趣之处在于它不仅仅局限于静态和"哑"网站 - 你可以实现任何你想要的动态功能。

其中大部分的功能由“lambda 函数”实现。

你可以让你的网站上的 JavaScript (或纯 HTML 表单) 调用 URL 接口,当调用时执行一些预先确定的代码。不同的供应商支持不同的编程语言。Netlify 目前支持 Node.js 和 Go。

在本教程中,我们将专注于使用 Node.js 编写的 lambda 函数。

Netlify 给我们提供了一个慷慨的免费使用限额,每个月最多可以调用 125,000 次函数,并且总计运行时间为 100 小时。函数提供了 128MB 的内存,每个函数可以执行最长 10 秒。对于一般需要,这已经足够了。

在内部,Netlify 在 AWS Lambda 上运行该函数,并为你抽象了 AWS 的所有复杂性。

我们如何创建函数呢?我们将一个 JavaScript 文件上传到站点的 functions 文件夹中。

在该文件中,我们必须遵循一个名为 handler 的方法:

exports.handler = (event, context, callback) => {
 //功能实现
}

如果您对 AWS Lambda 比较熟悉,这段代码会让您感到亲切。如果您从未使用过它,不用担心 - 这里是我们 handler 接收到的参数的简要概述:

  • event 是一个包含请求数据的对象
  • context 在使用用户身份验证时包含用户信息
  • callback 是一个我们可以用来创建响应的函数

我们可以做的最简单的事情是返回一个正面的响应。为此,我们使用 callback() 方法:

exports.handler = (event, context, callback) => {
 callback(null, {
 statusCode: 200,
 body: '没有问题,一切正常运行!'
 })
}

将此代码保存为 functions/test.js 文件。

使之工作所需做的唯一的事情是,在 netlify.toml 文件中配置函数的文件夹:

[build]
functions = "./functions"

试试看。在一个空文件夹中创建该文件,将其推送到 GitHub 存储库并从该存储库创建一个新的 Netlify 站点。

一旦你这样做,你将在 Netlify 的 设置 -> 函数 菜单中看到一个新的菜单,其中显示了我们函数使用的详细信息:

存储在 functions/test.js 文件中的函数,可以通过 https://YOURSITENAME.netlify.com/.netlify/functions/test 来访问。

要访问请求参数,请使用 event 对象:

  • event.path 请求路径
  • event.httpMethod 请求的 HTTP 方法
  • event.headers 请求的头信息
  • event.queryStringParameters 请求的查询参数
  • event.body 以 JSON 格式表示的请求正文

之前我们使用

callback(null, {
 statusCode: 200,
 body: '没有问题,一切正常运行!'
})

来生成响应。您还可以添加一个包含关联数组 (对象) 中的头信息值的 headers 对象。

Netlify 的这个存储库 https://github.com/netlify/netlify-functions-example 包含了许多 Netlify Lambda 函数的示例代码。