diff --git a/lib/lang.js b/lib/lang.js index ca92f793..ff2201b8 100644 --- a/lib/lang.js +++ b/lib/lang.js @@ -123,7 +123,7 @@ export const redirectUserLang = (lang, pageId) => { getQueryVariable('locale') || getQueryVariable('lang') || window?.navigator?.language - const siteIds = pageId.split(',') + const siteIds = pageId?.split(',') || [] // 默认是进首页; 如果检测到有一个多语言匹配了用户浏览器,则自动跳转过去 for (let index = 0; index < siteIds.length; index++) { diff --git a/lib/rss.js b/lib/rss.js index 5757b0f8..b60a6ceb 100644 --- a/lib/rss.js +++ b/lib/rss.js @@ -1,15 +1,16 @@ -import fs from 'fs' -import { Feed } from 'feed' import BLOG from '@/blog.config' -import ReactDOMServer from 'react-dom/server' -import { getPostBlocks } from '@/lib/db/getSiteData' import NotionPage from '@/components/NotionPage' +import { getPostBlocks } from '@/lib/db/getSiteData' +import { Feed } from 'feed' +import fs from 'fs' +import ReactDOMServer from 'react-dom/server' +import { siteConfig } from './config' /** - * 生成RSS内容 - * @param {*} post - * @returns - */ + * 生成RSS内容 + * @param {*} post + * @returns + */ const createFeedContent = async post => { // 加密的文章内容只返回摘要 if (post.password && post.password !== '') { @@ -20,30 +21,35 @@ const createFeedContent = async post => { post.blockMap = blockMap const content = ReactDOMServer.renderToString() const regexExp = - /
.*?<\/svg>
.*?<\/div><\/div>
.*?<\/div><\/div><\/div><\/div>/g + /
.*?<\/svg>
.*?<\/div><\/div>
.*?<\/div><\/div><\/div><\/div>/g return content.replace(regexExp, '') } } -export async function generateRss(posts) { +export async function generateRss(NOTION_CONFIG, posts) { + const link = siteConfig('LINK', BLOG.LINK, NOTION_CONFIG) + const author = siteConfig('AUTHOR', BLOG.AUTHOR, NOTION_CONFIG) + const lang = siteConfig('LANG', BLOG.LANG, NOTION_CONFIG) + const subPath = siteConfig('SUB_PATH', BLOG.SUB_PATH, NOTION_CONFIG) + const year = new Date().getFullYear() const feed = new Feed({ title: BLOG.TITLE, description: BLOG.DESCRIPTION, - link: `${BLOG.LINK}/${BLOG.SUB_PATH}`, - language: BLOG.LANG, - favicon: `${BLOG.LINK}/favicon.png`, - copyright: `All rights reserved ${year}, ${BLOG.AUTHOR}`, + link: `${link}/${subPath}`, + language: lang, + favicon: `${link}/favicon.png`, + copyright: `All rights reserved ${year}, ${author}`, author: { - name: BLOG.AUTHOR, + name: author, email: BLOG.CONTACT_EMAIL, - link: BLOG.LINK + link: link } }) for (const post of posts) { feed.addItem({ title: post.title, - link: `${BLOG.LINK}/${post.slug}`, + link: `${link}/${post.slug}`, description: post.summary, content: await createFeedContent(post), date: new Date(post?.publishDay) diff --git a/pages/[prefix]/[slug]/[...suffix].js b/pages/[prefix]/[slug]/[...suffix].js index 84591ca5..0d912a0b 100644 --- a/pages/[prefix]/[slug]/[...suffix].js +++ b/pages/[prefix]/[slug]/[...suffix].js @@ -82,7 +82,14 @@ export async function getStaticProps({ // 无法获取文章 if (!props?.post) { props.post = null - return { props, revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) } + return { + props, + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) + } } // 文章内容加载 @@ -116,7 +123,11 @@ export async function getStaticProps({ delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/[prefix]/[slug]/index.js b/pages/[prefix]/[slug]/index.js index 0af41678..88c1fc42 100644 --- a/pages/[prefix]/[slug]/index.js +++ b/pages/[prefix]/[slug]/index.js @@ -66,7 +66,14 @@ export async function getStaticProps({ params: { prefix, slug }, locale }) { // 无法获取文章 if (!props?.post) { props.post = null - return { props, revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) } + return { + props, + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) + } } // 文章内容加载 @@ -100,7 +107,11 @@ export async function getStaticProps({ params: { prefix, slug }, locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } function checkSlug(row) { diff --git a/pages/[prefix]/index.js b/pages/[prefix]/index.js index a0de57bd..408a3cc3 100644 --- a/pages/[prefix]/index.js +++ b/pages/[prefix]/index.js @@ -107,7 +107,14 @@ export async function getStaticProps({ params: { prefix }, locale }) { // 无法获取文章 if (!props?.post) { props.post = null - return { props, revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) } + return { + props, + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) + } } // 文章内容加载 @@ -142,7 +149,11 @@ export async function getStaticProps({ params: { prefix }, locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/archive/index.js b/pages/archive/index.js index 43eb7d27..21de9494 100644 --- a/pages/archive/index.js +++ b/pages/archive/index.js @@ -61,7 +61,11 @@ export async function getStaticProps({ locale }) { return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/category/[category]/index.js b/pages/category/[category]/index.js index 3c7caf62..d97266f3 100644 --- a/pages/category/[category]/index.js +++ b/pages/category/[category]/index.js @@ -46,7 +46,11 @@ export async function getStaticProps({ params: { category }, locale }) { return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/category/[category]/page/[page].js b/pages/category/[category]/page/[page].js index 212fa8fa..099ac7a2 100644 --- a/pages/category/[category]/page/[page].js +++ b/pages/category/[category]/page/[page].js @@ -12,7 +12,10 @@ import { useRouter } from 'next/router' export default function Category(props) { // 根据页面路径加载不同Layout文件 - const Layout = getLayoutByTheme({ theme: siteConfig('THEME'), router: useRouter() }) + const Layout = getLayoutByTheme({ + theme: siteConfig('THEME'), + router: useRouter() + }) return } @@ -28,7 +31,10 @@ export async function getStaticProps({ params: { category, page } }) { // 处理文章页数 props.postCount = props.posts.length // 处理分页 - props.posts = props.posts.slice(siteConfig('POSTS_PER_PAGE') * (page - 1), siteConfig('POSTS_PER_PAGE') * page) + props.posts = props.posts.slice( + siteConfig('POSTS_PER_PAGE') * (page - 1), + siteConfig('POSTS_PER_PAGE') * page + ) delete props.allPages props.page = page @@ -37,7 +43,11 @@ export async function getStaticProps({ params: { category, page } }) { return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } @@ -50,7 +60,9 @@ export async function getStaticPaths() { // 过滤状态类型 const categoryPosts = allPages ?.filter(page => page.type === 'Post' && page.status === 'Published') - .filter(post => post && post.category && post.category.includes(category.name)) + .filter( + post => post && post.category && post.category.includes(category.name) + ) // 处理文章页数 const postCount = categoryPosts.length const totalPages = Math.ceil(postCount / siteConfig('POSTS_PER_PAGE')) diff --git a/pages/category/index.js b/pages/category/index.js index e3af2bda..02ab5fe0 100644 --- a/pages/category/index.js +++ b/pages/category/index.js @@ -24,6 +24,10 @@ export async function getStaticProps({ locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/index.js b/pages/index.js index b6cb5014..dab14663 100644 --- a/pages/index.js +++ b/pages/index.js @@ -59,7 +59,7 @@ export async function getStaticProps(req) { generateRobotsTxt() // 生成Feed订阅 if (JSON.parse(BLOG.ENABLE_RSS)) { - generateRss(props?.latestPosts || []) + generateRss(props?.NOTION_CONFIG, props?.latestPosts || []) } // 生成全文索引 - 仅在 yarn build 时执行 && process.env.npm_lifecycle_event === 'build' @@ -68,7 +68,11 @@ export async function getStaticProps(req) { return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/page/[page].js b/pages/page/[page].js index 34ce91c7..2a96d0a1 100644 --- a/pages/page/[page].js +++ b/pages/page/[page].js @@ -64,7 +64,11 @@ export async function getStaticProps({ params: { page } }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/search/[keyword]/index.js b/pages/search/[keyword]/index.js index b1d8f6c2..84282e39 100644 --- a/pages/search/[keyword]/index.js +++ b/pages/search/[keyword]/index.js @@ -40,7 +40,11 @@ export async function getStaticProps({ params: { keyword }, locale }) { props.keyword = keyword return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/search/[keyword]/page/[page].js b/pages/search/[keyword]/page/[page].js index 2f01ec24..6e51989d 100644 --- a/pages/search/[keyword]/page/[page].js +++ b/pages/search/[keyword]/page/[page].js @@ -44,7 +44,11 @@ export async function getStaticProps({ params: { keyword, page }, locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/search/index.js b/pages/search/index.js index 3b637cd1..e5140c1f 100644 --- a/pages/search/index.js +++ b/pages/search/index.js @@ -54,7 +54,11 @@ export async function getStaticProps({ locale }) { ) return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/signin.js b/pages/signin.js index 42977ffe..1fd5ea15 100644 --- a/pages/signin.js +++ b/pages/signin.js @@ -27,7 +27,11 @@ export async function getStaticProps(req) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/signup.js b/pages/signup.js index 033b7796..d3cd278d 100644 --- a/pages/signup.js +++ b/pages/signup.js @@ -27,7 +27,11 @@ export async function getStaticProps(req) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/sitemap.xml.js b/pages/sitemap.xml.js index 1305818a..48be36de 100644 --- a/pages/sitemap.xml.js +++ b/pages/sitemap.xml.js @@ -1,5 +1,6 @@ // pages/sitemap.xml.js import BLOG from '@/blog.config' +import { siteConfig } from '@/lib/config' import { getNotionPageData } from '@/lib/db/getSiteData' import { extractLangId, extractLangPrefix } from '@/lib/utils/pageId' import { getServerSideSitemap } from 'next-sitemap' @@ -12,13 +13,12 @@ export const getServerSideProps = async ctx => { const id = extractLangId(siteId) const locale = extractLangPrefix(siteId) // 第一个id站点默认语言 - const localeFields = generateLocalesSitemap( - await getNotionPageData({ - pageId: id, - from: 'sitemap.xml' - }).allPages, - locale - ) + const siteData = await getNotionPageData({ + pageId: id, + from: 'sitemap.xml' + }) + const link = siteConfig('LINK', BLOG.LINK, siteData.NOTION_CONFIG) + const localeFields = generateLocalesSitemap(link, siteData.allPages, locale) fields = fields.concat(localeFields) } @@ -31,43 +31,43 @@ export const getServerSideProps = async ctx => { return getServerSideSitemap(ctx, fields) } -function generateLocalesSitemap(allPages, locale) { +function generateLocalesSitemap(link, allPages, locale) { if (locale && locale.length > 0 && locale.indexOf('/') !== 0) { locale = '/' + locale } const defaultFields = [ { - loc: `${BLOG.LINK}${locale}`, + loc: `${link}${locale}`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' }, { - loc: `${BLOG.LINK}${locale}/archive`, + loc: `${link}${locale}/archive`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' }, { - loc: `${BLOG.LINK}${locale}/category`, + loc: `${link}${locale}/category`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' }, { - loc: `${BLOG.LINK}${locale}/feed`, + loc: `${link}${locale}/feed`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' }, { - loc: `${BLOG.LINK}${locale}/search`, + loc: `${link}${locale}/search`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' }, { - loc: `${BLOG.LINK}${locale}/tag`, + loc: `${link}${locale}/tag`, lastmod: new Date().toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' @@ -81,7 +81,7 @@ function generateLocalesSitemap(allPages, locale) { ? post?.slug?.slice(1) : post.slug return { - loc: `${BLOG.LINK}${locale}/${slugWithoutLeadingSlash}`, + loc: `${link}${locale}/${slugWithoutLeadingSlash}`, lastmod: new Date(post?.publishDay).toISOString().split('T')[0], changefreq: 'daily', priority: '0.7' diff --git a/pages/tag/[tag]/index.js b/pages/tag/[tag]/index.js index 153cf415..3f03da82 100644 --- a/pages/tag/[tag]/index.js +++ b/pages/tag/[tag]/index.js @@ -42,7 +42,11 @@ export async function getStaticProps({ params: { tag }, locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/tag/[tag]/page/[page].js b/pages/tag/[tag]/page/[page].js index 519f9146..f8bb4b05 100644 --- a/pages/tag/[tag]/page/[page].js +++ b/pages/tag/[tag]/page/[page].js @@ -33,7 +33,11 @@ export async function getStaticProps({ params: { tag, page }, locale }) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } } diff --git a/pages/tag/index.js b/pages/tag/index.js index 24b3b148..8e1384ae 100644 --- a/pages/tag/index.js +++ b/pages/tag/index.js @@ -26,7 +26,11 @@ export async function getStaticProps(req) { delete props.allPages return { props, - revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) + revalidate: siteConfig( + 'REVALIDATE_SECOND', + BLOG.NEXT_REVALIDATE_SECOND, + props.NOTION_CONFIG + ) } }