onBeforeRender() hook (.page.server.js)

onBeforeRender() hook 通常与 passToClient 一起使用来获取数据,请参阅指南 > 数据获取

由于 .page.server.js 仅在 Node.js 中加载,因此可以使用 ORM/SQL 数据库查询。

// /pages/movies.page.server.js

// 注意,我们使用 `node-fetch`;
// 该文件仅在 Node.js 中运行,因此我们不需要使用同构(也称为通用)实现,例如 `cross-fetch`
import fetch from 'node-fetch'

export { onBeforeRender }

async function onBeforeRender(pageContext) {
	const response = await fetch('https://api.imdb.com/api/movies/')
	const { movies } = await response.json()
	/* 或和ORM一起使用:
  const movies = Movie.findAll() */
	/* 或和SQL一起使用:
  const movies = sql`SELECT * FROM movies;` */
	return {
		pageContext: {
			movies,
		},
	}
}

我们还可以使用 renderPage(pageContextInit) 在我们的服务器中间件中提供初始 pageContext 值。 这通常是传递有关鉴权信息的地方(请参阅 集成 > 鉴权

Examples:

客户端路由

如果我们使用 clientRouting,我们还可以选择在 .page.js 而不是 .page.server.js 中定义 onBeforeRender(); 该 hook 在 Node.js 和浏览器中都会被调用