feat: update not found handling
This commit is contained in:
parent
8f7b88a01a
commit
f1ed9a1609
24
Dockerfile
24
Dockerfile
@ -1,23 +1,15 @@
|
||||
FROM node:16
|
||||
|
||||
FROM node:16-alpine
|
||||
# install dependencies
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN pnpm install
|
||||
|
||||
# Copy all local files into the image.
|
||||
RUN npm install -g pnpm
|
||||
COPY . .
|
||||
|
||||
RUN pnpm install
|
||||
RUN pnpm build
|
||||
|
||||
###
|
||||
# Only copy over the Node pieces we need
|
||||
# ~> Saves 35MB
|
||||
###
|
||||
FROM node:16-slim
|
||||
|
||||
FROM node:16-alpine
|
||||
WORKDIR /app
|
||||
COPY --from=0 /app/build .
|
||||
COPY --from=0 /app/build /app
|
||||
COPY --from=0 /app/package.json /app
|
||||
COPY --from=0 /app/node_modules /app/node_modules
|
||||
|
||||
EXPOSE 3000
|
||||
CMD ["node", "./index.js"]
|
||||
CMD ["node","./index.js"]
|
||||
|
@ -39,7 +39,7 @@
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@damillora/plachta": "^1.0.0",
|
||||
"@damillora/plachta": "^1.2.0",
|
||||
"@tryghost/content-api": "^1.11.0",
|
||||
"fitvids": "^2.1.1",
|
||||
"svelte-material-icons": "^2.0.2",
|
||||
|
@ -1,7 +1,7 @@
|
||||
lockfileVersion: 5.3
|
||||
|
||||
specifiers:
|
||||
'@damillora/plachta': ^1.0.0
|
||||
'@damillora/plachta': ^1.2.0
|
||||
'@sveltejs/adapter-auto': next
|
||||
'@sveltejs/adapter-node': ^1.0.0-next.83
|
||||
'@sveltejs/kit': next
|
||||
@ -30,7 +30,7 @@ specifiers:
|
||||
vite: ^3.0.2
|
||||
|
||||
dependencies:
|
||||
'@damillora/plachta': 1.0.0_svelte@3.49.0
|
||||
'@damillora/plachta': 1.2.0_svelte@3.49.0
|
||||
'@tryghost/content-api': 1.11.0
|
||||
fitvids: 2.1.1
|
||||
svelte-material-icons: 2.0.2_svelte@3.49.0
|
||||
@ -66,8 +66,8 @@ packages:
|
||||
resolution: {integrity: sha512-B1/plF62pt+H2IJHvApK8fdOJAVsvojvacuac8x8s+JIyqbropMyqNqHTKLm3YD8ZFLGwYeFTudU+PQ7vGvBdA==}
|
||||
dev: true
|
||||
|
||||
/@damillora/plachta/1.0.0_svelte@3.49.0:
|
||||
resolution: {integrity: sha512-ZOwMptEOhI0fBOe40p8PJVjV3b78yg6HoW3e/PaKND+fXtvOTbFnDZGfCPcMOD+pKRZm9G5X7AygqJ9atn0rfA==}
|
||||
/@damillora/plachta/1.2.0_svelte@3.49.0:
|
||||
resolution: {integrity: sha512-DDXojXmmyUS6tX4dgv8eirAU8R13fzHhcX/VoRRf8kfEpwPLqkAVto7qCdfveN0/Q3t/IqX0AKiFCdCfRI50wA==}
|
||||
dependencies:
|
||||
svelte-material-icons: 2.0.2_svelte@3.49.0
|
||||
svelte-themes: 0.0.98
|
||||
|
@ -1,7 +1,4 @@
|
||||
<script lang="ts">
|
||||
import Post from "../../../../../Plachta/package/components/PageTypes/Post.svelte";
|
||||
|
||||
|
||||
export let post: any;
|
||||
|
||||
let schemaOrg = `
|
||||
@ -24,7 +21,10 @@ import Post from "../../../../../Plachta/package/components/PageTypes/Post.svelt
|
||||
"name": "${post.primary_author.name}",
|
||||
"image": {
|
||||
"@type": "ImageObject",
|
||||
"url": "${post.primary_author.profile_image ?? 'https://blog.nanao.moe/images/default-feature.jpg'}"
|
||||
"url": "${
|
||||
post.primary_author.profile_image ??
|
||||
'https://blog.nanao.moe/images/default-feature.jpg'
|
||||
}"
|
||||
},
|
||||
"url": "${post.primary_author.url}/"
|
||||
},
|
||||
@ -48,28 +48,34 @@ import Post from "../../../../../Plachta/package/components/PageTypes/Post.svelt
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<meta property="og:site_name" content="Damillora's Virtual Memoir" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:title" content={post.title} />
|
||||
<meta property="og:description" content={post.excerpt}/>
|
||||
<meta property="og:url" content={post.url} />
|
||||
<meta property="og:image" content={post.feature_image ?? 'https://blog.nanao.moe/images/default-feature.jpg'} />
|
||||
<meta property="article:published_time" content="2022-07-22T12:42:23.000Z" />
|
||||
<meta property="article:modified_time" content="2022-07-22T12:47:19.000Z" />
|
||||
<meta property="article:tag" content={post.primary_tag.name} />
|
||||
|
||||
<meta property="article:publisher" content="https://www.facebook.com/Damillora" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content={post.title} />
|
||||
<meta name="twitter:description" content={post.excerpt} />
|
||||
<meta name="twitter:url" content={post.url} />
|
||||
<meta name="twitter:image" content={post.feature_image ?? 'https://blog.nanao.moe/images/default-feature.jpg'} />
|
||||
<meta name="twitter:label1" content="Written by" />
|
||||
<meta name="twitter:data1" content={post.primary_author.name} />
|
||||
<meta name="twitter:label2" content="Filed under" />
|
||||
<meta name="twitter:data2" content={post.primary_tag.name} />
|
||||
<meta name="twitter:site" content="@Damillora" />
|
||||
<meta name="twitter:creator" content={post.primary_author.twitter} />
|
||||
<meta property="og:site_name" content="Damillora's Virtual Memoir" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:title" content={post.title} />
|
||||
<meta property="og:description" content={post.excerpt} />
|
||||
<meta property="og:url" content={post.url} />
|
||||
<meta
|
||||
property="og:image"
|
||||
content={post.feature_image ?? 'https://blog.nanao.moe/images/default-feature.jpg'}
|
||||
/>
|
||||
<meta property="article:published_time" content="2022-07-22T12:42:23.000Z" />
|
||||
<meta property="article:modified_time" content="2022-07-22T12:47:19.000Z" />
|
||||
<meta property="article:tag" content={post.primary_tag.name} />
|
||||
|
||||
<meta property="article:publisher" content="https://www.facebook.com/Damillora" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content={post.title} />
|
||||
<meta name="twitter:description" content={post.excerpt} />
|
||||
<meta name="twitter:url" content={post.url} />
|
||||
<meta
|
||||
name="twitter:image"
|
||||
content={post.feature_image ?? 'https://blog.nanao.moe/images/default-feature.jpg'}
|
||||
/>
|
||||
<meta name="twitter:label1" content="Written by" />
|
||||
<meta name="twitter:data1" content={post.primary_author.name} />
|
||||
<meta name="twitter:label2" content="Filed under" />
|
||||
<meta name="twitter:data2" content={post.primary_tag.name} />
|
||||
<meta name="twitter:site" content="@Damillora" />
|
||||
<meta name="twitter:creator" content={post.primary_author.twitter} />
|
||||
|
||||
{@html schemaOrg}
|
||||
</svelte:head>
|
||||
|
@ -32,21 +32,32 @@ export const browsePostWithAuthor = async (slug: string, page = 1) => {
|
||||
return posts
|
||||
}
|
||||
export const readPost = async (slug: string) => {
|
||||
const post = await api.posts.read({ slug }, { include: ['tags', 'authors'] });
|
||||
|
||||
return post;
|
||||
try {
|
||||
const post = await api.posts.read({ slug }, { include: ['tags', 'authors'] });
|
||||
|
||||
return post;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export const readTag = async (slug: string) => {
|
||||
const tag = await api.tags.read({ slug });
|
||||
|
||||
return tag;
|
||||
try {
|
||||
const tag = await api.tags.read({ slug });
|
||||
|
||||
return tag;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export const readAuthor = async (slug: string) => {
|
||||
const author = await api.authors.read({ slug });
|
||||
|
||||
return author;
|
||||
try {
|
||||
const author = await api.authors.read({ slug });
|
||||
return author;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export const browseLatestPost = async () => {
|
||||
|
@ -1,13 +1,18 @@
|
||||
<script lang="ts" context="module">
|
||||
export const load: Load = async ({ params }) => {
|
||||
const postSlug = params.slug;
|
||||
const post = await readPost(postSlug);
|
||||
|
||||
return {
|
||||
props: {
|
||||
post: post
|
||||
const post = await readPost(postSlug);
|
||||
if(!post) {
|
||||
return {
|
||||
status: 404,
|
||||
error: new Error('Post not found');
|
||||
}
|
||||
}
|
||||
};
|
||||
return {
|
||||
props: {
|
||||
post: post
|
||||
}
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -26,7 +31,7 @@
|
||||
import type { Load } from '@sveltejs/kit';
|
||||
import { readPost } from '$lib/content/contentApi';
|
||||
import { browser } from '$app/env';
|
||||
import PostSeo from '$lib/components/SEO/PostSEO.svelte';
|
||||
import PostSeo from '$lib/components/SEO/PostSEO.svelte';
|
||||
|
||||
export let post: any;
|
||||
|
||||
@ -39,7 +44,7 @@ import PostSeo from '$lib/components/SEO/PostSEO.svelte';
|
||||
<title>{post.title}</title>
|
||||
</svelte:head>
|
||||
|
||||
<PostSeo post={post} />
|
||||
<PostSeo {post} />
|
||||
<Hero background={post.feature_image ?? `/images/default-feature.jpg`} />
|
||||
|
||||
<Container>
|
||||
|
@ -1,15 +1,22 @@
|
||||
<script lang="ts" context="module">
|
||||
export const load: Load = async ({ params }) => {
|
||||
const tagSlug = params.tag;
|
||||
const tagObj = await readTag(tagSlug);
|
||||
const posts = await browsePostWithTag(tagSlug);
|
||||
const tagObj = await readTag(tagSlug);
|
||||
if (!tagObj) {
|
||||
return {
|
||||
status: 404,
|
||||
error: new Error('Tag not found')
|
||||
};
|
||||
}
|
||||
|
||||
const posts = await browsePostWithTag(tagSlug);
|
||||
|
||||
return {
|
||||
props: {
|
||||
tag: tagObj,
|
||||
posts: posts
|
||||
}
|
||||
};
|
||||
return {
|
||||
props: {
|
||||
tag: tagObj,
|
||||
posts: posts
|
||||
}
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -2,6 +2,14 @@
|
||||
export const load: Load = async ({ params }) => {
|
||||
const authorSlug = params.author;
|
||||
const authorObj = await readAuthor(authorSlug);
|
||||
|
||||
if (!authorObj) {
|
||||
return {
|
||||
status: 404,
|
||||
error: new Error('Author not found')
|
||||
};
|
||||
}
|
||||
|
||||
const posts = await browsePostWithAuthor(authorSlug);
|
||||
|
||||
return {
|
||||
|
@ -8,7 +8,7 @@ const config = {
|
||||
preprocess: preprocess(),
|
||||
|
||||
kit: {
|
||||
adapter: adapter()
|
||||
adapter: adapter(),
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -5,6 +5,8 @@ import preprocess from 'svelte-preprocess';
|
||||
const config = {
|
||||
plugins: [sveltekit({
|
||||
useVitePreprocess: true,
|
||||
|
||||
noExternal: ['dayjs']
|
||||
})],
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user