我正在使用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');
};
答案 0 :(得分:0)
这可以在Netlify上使用代理重写来工作。如果要从域的根路径同时运行站点,则问题将是管理静态资产。
需要一些有关Netilify的CDN如何与它们的功能路径配合使用的基础知识,
/.netlify/functions/<function name>
端点上/*/bar
之类的通配符代理重写路径来确定到bar.js
的路径。您必须使函数的端点以某个已知路径开头。您可以从以产品开始的根路径开始,但这将在/如果您想在根路径上拥有静态资产(如/index.html
)时造成问题,但这可以通过以下方法完成:列出重定向配置中的所有静态资产(不可扩展)。
这都是在路径中完成动态部分所需做的两个例子。
/<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}`
});
};
/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。