Я использую Sapper.js для питания своего приложения, но использую только статический контент, созданный при запуске sapper export
. Таким образом, сервер не отображает страницы.
Я использую AWS CloudFront с Lambda @ Edge для аутентификации HttpOnly
файлов cookie пользователя всякий раз, когда они запрашивают страницу. Если пользователь аутентифицирован, Lambda затем получит данные пользователя, такие как изображение профиля пользователя, имя пользователя и т. Д., И установит эти значения в пользовательских заголовках / файлах cookie (не HttpOnly) на страницах, возвращаемых CloudFront.
Эти значения могут быть установлены либо в заголовках, либо в файлах cookie, для них нет никаких требований.
Но мне нужно, чтобы этот динамический контент был доступен клиенту до того, как страница будет отрисована, чтобы избежать некрасивой вспышки пустого контента. Поэтому его следует извлекать внутри функции sapper preload
вместо onMount
, чтобы предотвратить рендеринг любого другого HTML до тех пор, пока данные не будут возвращены.
Я знаю, как получить внутри функции preload
вот так:
<script context="module">
export async function preload(page, session) {
const res = await this.fetch("SOME_ENDPOINT");
const data = await res.json();
return {data};
}
</script>
но я не уверен, как получить доступ к заголовкам или файлам cookie из этой функции.
РЕДАКТИРОВАТЬ: НОВЫЙ ПОДХОД?
Итак, я подумал, и мне кажется, что лучший способ на этом этапе - это попытаться преобразовать функцию sapper.middleware
Саппера, чтобы она принимала настраиваемый объект req
и возвращала объект res
вместо того, чтобы пытаться передать его клиенту.
Затем мы можем запустить npm run build
и использовать весь каталог build
внутри Lambda. Впоследствии мы можем передавать любые пользовательские данные в объект промежуточного программного обеспечения session
, как это объясняется в документации:
sapper.middleware({session: (CUSTOM_REQ, CUSTOM_RES) => ({user: CUSTOME_REQ.user})})
Нет необходимости получать какие-либо данные, поскольку теперь они должны быть доступны в store
.
Есть предположения?