-
-
Notifications
You must be signed in to change notification settings - Fork 331
/
+data.shared.ts
33 lines (28 loc) 路 1 KB
/
+data.shared.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// https://vike.dev/data
export { data }
export type Data = Awaited<ReturnType<typeof data>>
import fetch from 'cross-fetch'
import { filterMovieData } from '../filterMovieData'
import type { PageContextClient, PageContextServer } from 'vike/types'
import type { MovieDetails } from '../types'
import { render } from 'vike/abort'
async function data(pageContext: PageContextServer | PageContextClient) {
const dataUrl = `https://star-wars.brillout.com/api/films/${pageContext.routeParams!.id}.json`
let movie: MovieDetails
try {
const response = await fetch(dataUrl)
movie = (await response.json()) as MovieDetails
} catch (err) {
console.error(err)
throw render(503, `Couldn't fetch data, because failed HTTP GET request to ${dataUrl}`)
}
// We remove data we don't need because the data is passed to the client; we should
// minimize what is sent over the network.
movie = filterMovieData(movie)
const { title } = movie
return {
movie,
// The page's <title>
title
}
}