使用 Netlify 函数创建一个小 API

❥ 赞助商

这是一个云函数的很好的小用例示例。Glitch 有一个很棒的 友好词语包。假设你想要随机生成“happy-elephant”或“walking-tree”,并且你需要在你的网站上使用 JavaScript 来完成。嗯,这个包相当大(约 200 KB),这是必要的,因为它包含了 大型词典。当你不需要时,你不会想把它发送到你的客户端 JavaScript 中。

云函数很酷,我们可以使用它们为这个包提供一个小的 API。这样,大小就不那么重要了,它位于服务器上。Netlify 使得这变得尽可能简单。

这是一个仓库,它使这一切成为可能。代码非常少!

一个包含 Node 文件的 functions 文件夹。

在项目的根目录:/functions/random.js

此文件将需要 friendly-words 包并导出一个函数。它本质上是获取两个随机单词,将它们组合在一起,然后返回它们。

const friendlyWords = require("friendly-words");

exports.handler = function(event, context, callback) {
  const { predicates, objects } = friendlyWords;
  const numberOfPredicates = predicates.length;
  const numbersOfObjects = objects.length;

  const randomPredicate =
    predicates[Math.floor(Math.random() * numberOfPredicates)];
  const randomObject = objects[Math.floor(Math.random() * numbersOfObjects)];

  const output = `${randomPredicate}-${randomObject}`;

  callback(null, {
    headers: {
      "Access-Control-Allow-Origin": "*"
    },
    statusCode: 200,
    body: output
  });
};

部署到 Netlify

我们可以配置 Netlify 以在 netlify.toml 文件中告诉它我们有这个函数(这样我们甚至不必费心使用 UI)。

[build]
  command = "#"
  functions = "functions/"

但是如果我想在设置中告诉 Netlify,我可以这样做。

部署后,我给它一个不错的站点名称,然后该云函数将在一个 URL 上可用。你甚至可以在浏览器中看到它。

https://friendly-words.netlify.com/.netlify/functions/random

现在我不必在我的客户端 JavaScript 中发送该包了——我只需点击此 URL 即可获取我想要的内容。

CORS

如果我从我自己的网站(也在 friendly-words.netlify.com 上)访问此 URL,则不必担心 CORS,但如果我需要从任何其他网站使用它,则需要担心。请注意上面 Node JavaScript 中的 Access-Control-Allow-Origin 内容。这解决了这个问题。

演示

要使用我们的小 API,我们可以从中 fetch。就是这样!


这是否引起了你的兴趣?Netlify 有大量使用函数的示例


在做这个的过程中,我偶然发现了 Paul Kinlan 的文章,它做了几乎完全相同的事情,但他的 API 有一些额外的功能,你可能想查看一下。