访问 MDX 页面中的全局对象

问题描述 投票:0回答:1

我有一个 TypeScript 库,在给定条件下,它应该重定向到错误页面。
一种方法是使用内部 Astro 全局对象,例如

Astro.redirect('/404')
。不幸的是,渲染 MDX 页面时
Astro
似乎无法访问。

这是一个 MWE,为简单起见,我使用

Astro.url

foo.mdx

---
layout: ./foolayout.astro
---

hello

foolayout.astro

---
import lib from "./foolib.ts";
---
{lib.url}
<slot />

foolib.ts

export const url = Astro.url; 

这给出了错误:

Astro is not defined

请注意,如果我在布局文件中使用 Astro 全局对象,则不会出现错误。那就是:

foolayout.astro

---
---
{Astro.url}
<slot />

但是,当满足给定条件时,我需要从 TypeScript 库使用它。

javascript typescript web-component astrojs mdxjs
1个回答
0
投票

如果你想进行重定向,你需要从 frontmatter 进行。写入 HTML 已经太晚了。尝试这样的事情:

---
import lib from "./foolib.ts";

const res = lib.getSomething()
if (res === undefined) { // or similar condition
   return Astro.redirect('/404')
}
---

<slot />
© www.soinside.com 2019 - 2024. All rights reserved.