如何使用 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 函数的示例代码。