diff --git a/package-lock.json b/package-lock.json index 92a840b8..51783872 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13533,6 +13533,11 @@ } } }, + "next-absolute-url": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/next-absolute-url/-/next-absolute-url-1.1.1.tgz", + "integrity": "sha512-RrRIOJyuoTslfQ3SLQfRlbtFx2ylgOhTb5CaBpUZLPIRrOLUj72/yeHmU2MC1aRfMuW1urL40URypdqECCINdA==" + }, "next-server": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/next-server/-/next-server-9.0.2.tgz", diff --git a/package.json b/package.json index fd141782..0fbb446f 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "mongodb": "^2.1.14", "mz": "^2.4.0", "next": "^9.0.2", + "next-absolute-url": "^1.1.1", "react": "^16.8.6", "react-dom": "^16.8.6", "react-redux": "^4.4.8", diff --git a/pages/album/[album].js b/pages/album/[album].js index d420b53a..5a58c4f4 100644 --- a/pages/album/[album].js +++ b/pages/album/[album].js @@ -6,6 +6,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 } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/gallery' const id = ctx.query.album - const apiUrl = `http://localhost:3000/api/albums/${id}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/albums/${id}`)) const album = res.data return { diff --git a/pages/article/[article].jsx b/pages/article/[article].jsx index 5d82caf8..90194d90 100644 --- a/pages/article/[article].jsx +++ b/pages/article/[article].jsx @@ -8,6 +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 } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/' const id = ctx.query.article - const apiUrl = `http://localhost:3000/api/articles/${id}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/articles/${id}`)) const article = res.data const image = article.preview.artifacts.fb diff --git a/pages/articles/[page].jsx b/pages/articles/[page].jsx index 7564bf48..9ae6e222 100644 --- a/pages/articles/[page].jsx +++ b/pages/articles/[page].jsx @@ -7,6 +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 } from '../../src/next-lib' const Page = (props) => ( { const pageUrl = '/' const page = parseInt(ctx.query.page) const pageSize = parseInt(ctx.query.pageSize) || 15 - const apiUrl = `http://localhost:3000/api/articles?page=${page}&pageSize=${pageSize}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/articles?page=${page}&pageSize=${pageSize}`)) const articles = res.data.items const nextPage = res.data.nextPage const prevPage = res.data.prevPage diff --git a/pages/collective.jsx b/pages/collective.jsx index 6968ee19..48ac0f07 100644 --- a/pages/collective.jsx +++ b/pages/collective.jsx @@ -9,6 +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 } from '../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url - const apiUrl = `http://localhost:3000/api/persons` - const res = await axios.get(apiUrl) + + const res = await axios.get(createApiUrl(ctx.req, '/api/persons')) const persons = res.data.items const title = 'Преподаватели Шлиссельбургской ДХШ' const imageFile = 'Images/HudozkaCollective2017.jpg' - const imageUrl = `http://localhost:3000/api/image?file=${imageFile}` - const resImage = await axios.get(imageUrl) + const resImage = await axios.get(createApiUrl(ctx.req, `/api/image?file=${imageFile}`)) return { persons, diff --git a/pages/document/[document].jsx b/pages/document/[document].jsx index 5030f910..8d78950b 100644 --- a/pages/document/[document].jsx +++ b/pages/document/[document].jsx @@ -8,6 +8,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 } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/documents' const id = ctx.query.document - const apiUrl = `http://localhost:3000/api/files/${id}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/files/${id}`)) const file = res.data return { diff --git a/pages/documents.jsx b/pages/documents.jsx index 419eceff..8f29c429 100644 --- a/pages/documents.jsx +++ b/pages/documents.jsx @@ -9,6 +9,7 @@ import { meta } from '../src/lib/meta' import DocumentList from '../src/components/DocumentList' import { unique } from '../src/utils/common' +import { createApiUrl } from '../src/next-lib' function getSorted(documents) { const compose = (...fns) => value => fns @@ -111,8 +112,7 @@ const Page = (props) => ( Page.getInitialProps = async (ctx) => { const pageUrl = '/documents' - const apiUrl = `http://localhost:3000/api/files` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, '/api/files')) const files = res.data.items const title = 'Документы' const collections = getSorted(files) diff --git a/pages/gallery.jsx b/pages/gallery.jsx index 27974838..3874dc78 100644 --- a/pages/gallery.jsx +++ b/pages/gallery.jsx @@ -9,6 +9,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 } from '../src/next-lib' const albumsByYear = splitBy(album => new Date(album.date).getFullYear()) @@ -83,8 +84,7 @@ const Page = (props) => ( Page.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url - const apiUrl = `http://localhost:3000/api/albums` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/albums`)) const items = res.data.items const albumCollections = albumsByYear(items) const title = 'Галерея' diff --git a/pages/index.jsx b/pages/index.jsx index 95a67e55..e7e8b6d8 100644 --- a/pages/index.jsx +++ b/pages/index.jsx @@ -8,6 +8,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 } from '../src/next-lib' const Page = (props) => ( { const pageUrl = '/' const page = 1 const pageSize = ctx.query.pageSize || 15 - const apiUrl = `http://localhost:3000/api/articles?page=${page}&pageSize=${pageSize}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/articles?page=${page}&pageSize=${pageSize}`)) const articles = res.data.items const nextPage = res.data.nextPage const prevPage = res.data.prevPage diff --git a/pages/next.jsx b/pages/next.jsx index 98aa6179..c1ce59cd 100644 --- a/pages/next.jsx +++ b/pages/next.jsx @@ -7,6 +7,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 } from '../src/next-lib' const Index = (props) => ( ( Index.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url // // const pageUrl = '/neighbors/2018' - const apiUrl = `http://localhost:3000/api/page?page=${pageUrl}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/page?page=${pageUrl}`)) const page = res.data const image = page.preview.artifacts.fb diff --git a/pages/schedule.jsx b/pages/schedule.jsx index 62f661cb..b5dde406 100644 --- a/pages/schedule.jsx +++ b/pages/schedule.jsx @@ -6,6 +6,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 } from '../src/next-lib' const Page = (props) => ( { const pageUrl = ctx.req.url const period = '2016-2017' const semester = 'spring' - const apiUrl = `http://localhost:3000/api/schedule?period=${period}&semester=${semester}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/schedule?period=${period}&semester=${semester}`)) const schedule = res.data return { diff --git a/pages/teacher/[person].jsx b/pages/teacher/[person].jsx index 26317bb5..831453f1 100644 --- a/pages/teacher/[person].jsx +++ b/pages/teacher/[person].jsx @@ -7,6 +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 } from '../../src/next-lib' const Index = (props) => ( ( Index.getInitialProps = async (ctx) => { const pageUrl = '/collective' const id = ctx.query.person - const apiUrl = `http://localhost:3000/api/persons/${id}` - const res = await axios.get(apiUrl) + const res = await axios.get(createApiUrl(ctx.req, `/api/persons/${id}`)) const person = res.data const name = person.name || [] const title = name.join(' ') diff --git a/src/next-lib.js b/src/next-lib.js new file mode 100644 index 00000000..81366139 --- /dev/null +++ b/src/next-lib.js @@ -0,0 +1,7 @@ +import absoluteUrl from 'next-absolute-url' + +export function createApiUrl(req, path) { + const { origin } = absoluteUrl(req, 'localhost:3000') + + return `${origin}${path}` +}