Моя функция-обработчик лямбды внутри bar.js не срабатывает, когда я загружаю www.mywebsite.com/foo/bar. Почему? - PullRequest
0 голосов
/ 31 октября 2019

Я использую Netlify. Я создал функцию-лямбда-обработчик внутри bar.js

См. Код ниже, чтобы увидеть функцию, которую я пытаюсь запустить. Он запускается, если я захожу на www.mywebsite.com/bar, но не запускается, когда я захожу на www.mywebsite.com/foo/bar.

В этом случае «foo» будет переменной,Это может быть mywebsite.com/something/bar. Я не могу предсказать, какой будет первая часть пути, но мне нужно использовать ее, чтобы поместить ее в запрос URL-адреса конечной точки для «продукта» (также показан ниже).

Как добавить обработчик внеизвестный путь? Я знаю, что «бар» всегда будет «баром», но я не могу предсказать предыдущую часть.

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

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

1 Ответ

0 голосов
/ 31 октября 2019

Это может работать с использованием переписывания прокси в Netlify. Проблема будет заключаться в управлении статическими активами, если вы хотите одновременно запустить сайт из корневого пути домена.

Необходимы базовые знания о том, как CDN для Netilify работает с их функциями. пути, которые могут помочь.

  • Все функции 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 домена /product/<product-id>

_redirects в корне сайта

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

добавить функцию product.js в папку функций

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

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

Примечание: Вот репозиторий GitHub с главной веткой как Опция 2 и from-rootветвь как вариант 1 .

...