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

150 阅读3分钟

如何使用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的所有复杂性。

我们如何创建一个函数?我们在网站的functions 文件夹中上传一个JavaScript文件。

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

exports.handler = (event, context, callback) => {
  //functionality
}

如果你熟悉AWS Lambda,这个函数的代码你会很熟悉。如果你从来没有使用过它,不用担心--这里简要介绍一下我们的处理程序接收的参数。

  • event 是一个包含请求数据的对象
  • context 包含用户信息,当使用个人信息进行用户认证时
  • callback 是一个函数,我们可以用它来创建一个响应

我们能做的最简单的事情是返回一个积极的响应。要做到这一点,我们使用callback() 方法。

exports.handler = (event, context, callback) => {
  callback(null, {
    statusCode: 200,
    body: 'No worries, all is working fine!'
  })
}

将其保存到一个functions/test.js 文件。

你需要做的唯一一件事是为netlify.toml 文件中的函数配置文件夹,使其发挥作用。

[build]
functions = "./functions"

试试这个。在一个空的文件夹中创建该文件,将其推送到GitHub仓库,并从该仓库创建一个新的Netlify网站。

一旦你这样做了,在Netlify的Settings -> Functions 菜单中就会出现一个新的菜单,显示我们的函数使用细节。

存储在functions/test.js 文件中的函数,可以在YOURSITENAME.netlify.com/.netlify/fu…

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

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

之前我们用

callback(null, {
  statusCode: 200,
  body: 'No worries, all is working fine!'
})

来制作一个响应。你也可以添加一个headers 对象,其中包含一个包含头信息值的关联数组(对象)。

这个由Netlifygithub.com/netlify/net…的资源库包含了很多Netlify Lambda函数的样本。