当我加载www.mywebsite.com/foo/bar时,我的bar.js内部的lambda处理函数未命中。为什么?

时间:2019-10-30 23:43:48

标签: lambda netlify

我正在使用Netlify。我在bar.js

中创建了一个lambda处理函数。

请参阅下面的代码,以查看我要运行的功能。如果我访问www.mywebsite.com/bar,它将运行,但是当我访问www.mywebsite.com/foo/bar时,它将无法运行。

在这种情况下,“ foo”将是变量。可能是mywebsite.com/something/bar。我无法预测第一个路径部分是什么,但是我需要使用它将其放置在端点网址的“产品”查询中(也如下所示)。

如何将处理程序添加到未知路径?我知道“酒吧”将永远是“酒吧”,但我无法预测前面的部分。

var getURL = (product) => `www.randomdatabase.com/?product=${product}`;

exports.handler = async function (event, context, callback) {
    console.log('handler in bar.js ran');
};

1 个答案:

答案 0 :(得分:0)

这可以在Netlify上使用代理重写来工作。如果要从域的根路径同时运行站点,则问题将是管理静态资产。

需要一些有关Netilify的CDN如何与它们的功能路径配合使用的基础知识,

  • 您网站上Netlify上的所有功能都在/.netlify/functions/<function name>端点上
  • 作为示例,没有一种方法可以使用/*/bar之类的通配符代理重写路径来确定到bar.js的路径。您必须使函数的端点以某个已知路径开头。

您可以从以产品开始的根路径开始,但这将在/如果您想在根路径上拥有静态资产(如/index.html)时造成问题,但这可以通过以下方法完成:列出重定向配置中的所有静态资产(不可扩展)。

这都是在路径中完成动态部分所需做的两个例子。

选项1:从域/<product-id>的根开始

_redirects在网站的根目录

/ /index.html 200
/* /.netlify/functions/product/:splat 200

将功能product.js添加到功能文件夹

exports.handler = async function(event, context, callback) {
  // path will come in as `/<some-product-id>/<rest>
  const pathArr = event.path.split("/");
  const productId = pathArr[1];
  console.log(`Product id is ${productId}`);

  const body = productId
    ? `<h1>Product id = ${productId}</h1>`
    : "Missing product!";
  callback(null, {
    statusCode: 200,
    body: `${body}`
  });
};

选项2:来自域/product的{​​{1}}

/product/<product-id>在网站的根目录

_redirects

将功能/product/* /.netlify/functions/product/:splat 200 添加到功能文件夹

product.js

注意:Here is a GitHub repository,其中master分支为Option 2,from-root分支为Option 1