added wrapper to getInitialProps to prevent api calls in production

This commit is contained in:
tmshv committed 2019-10-13 19:48:52 +03:00
1 parent dded475c47
commit fe5cc36182
12 files changed
+49 -33

No files matched your search

+3 -3
View File
@@ -5,7 +5,7 @@ import Article from '../../src/components/Article'
import Html from '../../src/components/Html'
import menuModel from '../../src/models/menu'
import { buildMenu } from '../../src/lib/menu'
import { createApiUrl, requestGet } from '../../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../../src/next-lib'
const Page = (props) => (
<App
@@ -30,7 +30,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/gallery'
const id = ctx.query.album
const album = await requestGet(createApiUrl(ctx.req, `/api/albums/${id}`), {})
@@ -39,6 +39,6 @@ Page.getInitialProps = async (ctx) => {
album,
pageUrl,
}
}
})
export default Page
+3 -3
View File
@@ -8,7 +8,7 @@ import menuModel from '../../src/models/menu'
import { buildMenu } from '../../src/lib/menu'
import { Meta } from '../../src/components/Meta'
import { meta } from '../../src/lib/meta'
import { createApiUrl, requestGet } from '../../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../../src/next-lib'
const Page = (props) => (
<App
@@ -35,7 +35,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/'
const id = ctx.query.article
const article = await requestGet(createApiUrl(ctx.req, `/api/articles/${id}`), {})
@@ -51,6 +51,6 @@ Page.getInitialProps = async (ctx) => {
imageHeight: image.height,
}),
}
}
})
export default Page
+3 -3
View File
@@ -6,7 +6,7 @@ import menuModel from '../../src/models/menu'
import { buildMenu } from '../../src/lib/menu'
import { meta } from '../../src/lib/meta'
import { Meta } from '../../src/components/Meta'
import { createApiUrl, requestGet } from '../../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../../src/next-lib'
const Page = (props) => (
<App
@@ -28,7 +28,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/'
const page = parseInt(ctx.query.page)
const pageSize = parseInt(ctx.query.pageSize) || 15
@@ -48,6 +48,6 @@ Page.getInitialProps = async (ctx) => {
title,
})
}
}
})
export default Page
+3 -3
View File
@@ -9,7 +9,7 @@ import { CardList } from '../src/components/CardList'
import menuModel from '../src/models/menu'
import { buildMenu } from '../src/lib/menu'
import { meta } from '../src/lib/meta'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
const Page = (props) => (
<App
@@ -48,7 +48,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = ctx.req.url
const res = await requestGet(createApiUrl(ctx.req, '/api/persons'), {})
@@ -69,6 +69,6 @@ Page.getInitialProps = async (ctx) => {
description: 'Преподаватели Шлиссельбургской ДХШ',
})
}
}
})
export default Page
+3 -3
View File
@@ -7,7 +7,7 @@ import menuModel from '../../src/models/menu'
import { buildMenu } from '../../src/lib/menu'
import { meta } from '../../src/lib/meta'
import { Meta } from '../../src/components/Meta'
import { createApiUrl, requestGet } from '../../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../../src/next-lib'
const Page = (props) => (
<App
@@ -26,7 +26,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/documents'
const id = ctx.query.document
const file = await requestGet(createApiUrl(ctx.req, `/api/files/${id}`), {})
@@ -38,6 +38,6 @@ Page.getInitialProps = async (ctx) => {
title: file.meta,
})
}
}
})
export default Page
+3 -3
View File
@@ -8,7 +8,7 @@ import { meta } from '../src/lib/meta'
import DocumentList from '../src/components/DocumentList'
import { unique } from '../src/utils/common'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
function getSorted(documents) {
const compose = (...fns) => value => fns
@@ -109,7 +109,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/documents'
const res = await requestGet(createApiUrl(ctx.req, '/api/files'), {})
const files = res.items || []
@@ -125,6 +125,6 @@ Page.getInitialProps = async (ctx) => {
description: 'Документы Шлиссельбургской ДХШ',
})
}
}
})
export default Page
+3 -3
View File
@@ -8,7 +8,7 @@ import menuModel from '../src/models/menu'
import { buildMenu } from '../src/lib/menu'
import { splitBy } from '../src/lib/array'
import { meta } from '../src/lib/meta'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
const albumsByYear = splitBy(album => new Date(album.date).getFullYear())
@@ -81,7 +81,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = ctx.req.url
const res = await requestGet(createApiUrl(ctx.req, `/api/albums`), {})
const items = res.items || []
@@ -97,6 +97,6 @@ Page.getInitialProps = async (ctx) => {
description: 'Галерея работ учащихся Шлиссельбургской Детской Художественной Школы'
})
}
}
})
export default Page
+3 -3
View File
@@ -7,7 +7,7 @@ import { HudozkaTitle } from '../src/components/HudozkaTitle'
import menuModel from '../src/models/menu'
import { meta } from '../src/lib/meta'
import { buildMenu } from '../src/lib/menu'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
const Page = (props) => (
<App
@@ -32,7 +32,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/'
const page = 1
const pageSize = ctx.query.pageSize || 15
@@ -53,6 +53,6 @@ Page.getInitialProps = async (ctx) => {
url: pageUrl,
})
}
}
})
export default Page
+3 -3
View File
@@ -6,7 +6,7 @@ import menuModel from '../src/models/menu'
import { buildMenu } from '../src/lib/menu'
import { Meta } from '../src/components/Meta'
import { meta } from '../src/lib/meta'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
const Index = (props) => (
<App
@@ -29,7 +29,7 @@ const Index = (props) => (
</App>
)
Index.getInitialProps = async (ctx) => {
Index.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = ctx.req.url
// // const pageUrl = '/neighbors/2018'
const page = await requestGet(createApiUrl(ctx.req, `/api/page?page=${pageUrl}`), {})
@@ -46,6 +46,6 @@ Index.getInitialProps = async (ctx) => {
imageHeight: image.height,
}),
}
}
})
export default Index
+3 -3
View File
@@ -5,7 +5,7 @@ import Schedule from '../src/components/Schedule'
import Share from '../src/components/Share'
import menuModel from '../src/models/menu'
import { buildMenu } from '../src/lib/menu'
import { createApiUrl, requestGet } from '../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../src/next-lib'
const Page = (props) => (
<App
@@ -27,7 +27,7 @@ const Page = (props) => (
</App>
)
Page.getInitialProps = async (ctx) => {
Page.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = ctx.req.url
const period = '2016-2017'
const semester = 'spring'
@@ -38,6 +38,6 @@ Page.getInitialProps = async (ctx) => {
pageUrl,
title: 'Расписание',
}
}
})
export default Page
+3 -3
View File
@@ -7,7 +7,7 @@ import { Meta } from '../../src/components/Meta'
import menuModel from '../../src/models/menu'
import { buildMenu } from '../../src/lib/menu'
import { meta } from '../../src/lib/meta'
import { createApiUrl, requestGet } from '../../src/next-lib'
import { createApiUrl, requestGet, wrapInitialProps } from '../../src/next-lib'
const Index = (props) => (
<App
@@ -27,7 +27,7 @@ const Index = (props) => (
</App>
)
Index.getInitialProps = async (ctx) => {
Index.getInitialProps = wrapInitialProps(async (ctx) => {
const pageUrl = '/collective'
const id = ctx.query.person
const person = await requestGet(createApiUrl(ctx.req, `/api/persons/${id}`), {})
@@ -46,6 +46,6 @@ Index.getInitialProps = async (ctx) => {
imageHeight: image.height,
})
}
}
})
export default Index
+16
View File
@@ -10,6 +10,22 @@ export async function requestGet(url, defaultResponse) {
}
}
/**
* This wrapper prevents fetching api request in static export mode and production environment
* because nextjs call getInitialProps on the client side
*
* @param {*} fn
*/
export function wrapInitialProps(fn) {
return async ctx => {
if (process.env.NODE_ENV === 'production' && process.browser) {
return __NEXT_DATA__.props.pageProps;
}
return fn(ctx)
}
}
export function createApiUrl(req, path) {
const { origin } = absoluteUrl(req, 'localhost:3000')