diff --git a/package.json b/package.json index fc059065..23b371c1 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "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 dc94c28b..81c77d28 100644 --- a/pages/album/[album].js +++ b/pages/album/[album].js @@ -1,12 +1,11 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../../src/components/App' 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' +import { createApiUrl, requestGet } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/gallery' const id = ctx.query.album - const res = await axios.get(createApiUrl(ctx.req, `/api/albums/${id}`)) - const album = res.data + const album = await requestGet(createApiUrl(ctx.req, `/api/albums/${id}`), {}) return { album, diff --git a/pages/article/[article].jsx b/pages/article/[article].jsx index 90194d90..3b1f54d7 100644 --- a/pages/article/[article].jsx +++ b/pages/article/[article].jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../../src/components/App' import Article from '../../src/components/Article' @@ -8,7 +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' +import { createApiUrl, requestGet } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/' const id = ctx.query.article - const res = await axios.get(createApiUrl(ctx.req, `/api/articles/${id}`)) - const article = res.data + const article = await requestGet(createApiUrl(ctx.req, `/api/articles/${id}`), {}) const image = article.preview.artifacts.fb return { diff --git a/pages/articles/[page].jsx b/pages/articles/[page].jsx index 9ae6e222..3716e564 100644 --- a/pages/articles/[page].jsx +++ b/pages/articles/[page].jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../../src/components/App' import { ArticleCardList } from '../../src/components/ArticleCardList' @@ -7,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 } from '../../src/next-lib' +import { createApiUrl, requestGet } from '../../src/next-lib' const Page = (props) => ( { const pageUrl = '/' const page = parseInt(ctx.query.page) const pageSize = parseInt(ctx.query.pageSize) || 15 - 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 + const res = await requestGet(createApiUrl(ctx.req, `/api/articles?page=${page}&pageSize=${pageSize}`), {}) + const articles = res.items + const nextPage = res.nextPage + const prevPage = res.prevPage const title = 'События' return { @@ -51,4 +50,4 @@ Page.getInitialProps = async (ctx) => { } } -export default Page \ No newline at end of file +export default Page diff --git a/pages/collective.jsx b/pages/collective.jsx index 48ac0f07..0fdc85ee 100644 --- a/pages/collective.jsx +++ b/pages/collective.jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' import { Meta } from '../src/components/Meta' @@ -9,7 +8,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' +import { createApiUrl, requestGet } from '../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url - const res = await axios.get(createApiUrl(ctx.req, '/api/persons')) - const persons = res.data.items + const res = await requestGet(createApiUrl(ctx.req, '/api/persons'), {}) + const persons = res.items || [] const title = 'Преподаватели Шлиссельбургской ДХШ' const imageFile = 'Images/HudozkaCollective2017.jpg' - const resImage = await axios.get(createApiUrl(ctx.req, `/api/image?file=${imageFile}`)) + const resImage = await requestGet(createApiUrl(ctx.req, `/api/image?file=${imageFile}`), null) + const image = resImage ? resImage.data.artifacts.large : null return { persons, - image: resImage.data.artifacts.large, + image, pageUrl, title, meta: meta({ diff --git a/pages/document/[document].jsx b/pages/document/[document].jsx index 8d78950b..6845d8bd 100644 --- a/pages/document/[document].jsx +++ b/pages/document/[document].jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../../src/components/App' import Document from '../../src/components/Document' @@ -8,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 } from '../../src/next-lib' +import { createApiUrl, requestGet } from '../../src/next-lib' const Page = (props) => ( ( Page.getInitialProps = async (ctx) => { const pageUrl = '/documents' const id = ctx.query.document - const res = await axios.get(createApiUrl(ctx.req, `/api/files/${id}`)) - const file = res.data + const file = await requestGet(createApiUrl(ctx.req, `/api/files/${id}`), {}) return { file, diff --git a/pages/documents.jsx b/pages/documents.jsx index 8f29c429..9df5f187 100644 --- a/pages/documents.jsx +++ b/pages/documents.jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' import { Meta } from '../src/components/Meta' @@ -9,7 +8,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' +import { createApiUrl, requestGet } from '../src/next-lib' function getSorted(documents) { const compose = (...fns) => value => fns @@ -112,8 +111,8 @@ const Page = (props) => ( Page.getInitialProps = async (ctx) => { const pageUrl = '/documents' - const res = await axios.get(createApiUrl(ctx.req, '/api/files')) - const files = res.data.items + const res = await requestGet(createApiUrl(ctx.req, '/api/files'), {}) + const files = res.items || [] const title = 'Документы' const collections = getSorted(files) diff --git a/pages/gallery.jsx b/pages/gallery.jsx index 3874dc78..7e5bdab0 100644 --- a/pages/gallery.jsx +++ b/pages/gallery.jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' // import Album from '../src/components/Album' @@ -9,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 } from '../src/next-lib' +import { createApiUrl, requestGet } from '../src/next-lib' const albumsByYear = splitBy(album => new Date(album.date).getFullYear()) @@ -84,8 +83,8 @@ const Page = (props) => ( Page.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url - const res = await axios.get(createApiUrl(ctx.req, `/api/albums`)) - const items = res.data.items + const res = await requestGet(createApiUrl(ctx.req, `/api/albums`), {}) + const items = res.items || [] const albumCollections = albumsByYear(items) const title = 'Галерея' diff --git a/pages/index.jsx b/pages/index.jsx index e7e8b6d8..f1d0f025 100644 --- a/pages/index.jsx +++ b/pages/index.jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' import { Meta } from '../src/components/Meta' @@ -8,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 } from '../src/next-lib' +import { createApiUrl, requestGet } from '../src/next-lib' const Page = (props) => ( { const pageUrl = '/' const page = 1 const pageSize = ctx.query.pageSize || 15 - 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 + const res = await requestGet(createApiUrl(ctx.req, `/api/articles?page=${page}&pageSize=${pageSize}`), {}) + const articles = res.items + const nextPage = res.nextPage + const prevPage = res.prevPage const title = 'Шлиссельбургская ДХШ' return { diff --git a/pages/next.jsx b/pages/next.jsx index c1ce59cd..9db46e6e 100644 --- a/pages/next.jsx +++ b/pages/next.jsx @@ -1,5 +1,4 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' import Page from '../src/components/Page' @@ -7,14 +6,14 @@ 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' +import { createApiUrl, requestGet } from '../src/next-lib' const Index = (props) => ( + > {props.title} @@ -33,9 +32,8 @@ const Index = (props) => ( Index.getInitialProps = async (ctx) => { const pageUrl = ctx.req.url // // const pageUrl = '/neighbors/2018' - const res = await axios.get(createApiUrl(ctx.req, `/api/page?page=${pageUrl}`)) - const page = res.data - const image = page.preview.artifacts.fb + const page = await requestGet(createApiUrl(ctx.req, `/api/page?page=${pageUrl}`), {}) + const image = page.preview ? page.preview.artifacts.fb : {} return { content: page.data, diff --git a/pages/schedule.jsx b/pages/schedule.jsx index b5dde406..41894576 100644 --- a/pages/schedule.jsx +++ b/pages/schedule.jsx @@ -1,12 +1,11 @@ import React from 'react' -import axios from 'axios' import Head from 'next/head' import { App } from '../src/components/App' 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' +import { createApiUrl, requestGet } from '../src/next-lib' const Page = (props) => ( { const pageUrl = ctx.req.url const period = '2016-2017' const semester = 'spring' - const res = await axios.get(createApiUrl(ctx.req, `/api/schedule?period=${period}&semester=${semester}`)) - const schedule = res.data + const schedule = await requestGet(createApiUrl(ctx.req, `/api/schedule?period=${period}&semester=${semester}`), {}) return { schedule, diff --git a/pages/teacher/[person].jsx b/pages/teacher/[person].jsx index 831453f1..5f4f5a04 100644 --- a/pages/teacher/[person].jsx +++ b/pages/teacher/[person].jsx @@ -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 } from '../../src/next-lib' +import { createApiUrl, requestGet } from '../../src/next-lib' const Index = (props) => ( ( Index.getInitialProps = async (ctx) => { const pageUrl = '/collective' const id = ctx.query.person - const res = await axios.get(createApiUrl(ctx.req, `/api/persons/${id}`)) - const person = res.data + const person = await requestGet(createApiUrl(ctx.req, `/api/persons/${id}`), {}) const name = person.name || [] const title = name.join(' ') - const image = person.preview.artifacts.fb + const image = person.preview ? person.preview.artifacts.fb : {} return { pageUrl, diff --git a/src/next-lib.js b/src/next-lib.js index 81366139..8d572ed2 100644 --- a/src/next-lib.js +++ b/src/next-lib.js @@ -1,7 +1,33 @@ -import absoluteUrl from 'next-absolute-url' +export async function requestGet(url, defaultResponse) { + try { + const res = await axios.get(url) + + return res.data + } catch (e) { + return defaultResponse + } +} export function createApiUrl(req, path) { const { origin } = absoluteUrl(req, 'localhost:3000') return `${origin}${path}` } + +function absoluteUrl(req, defaultLocalhost) { + var protocol = 'https:'; + var host = req + ? (req.headers['x-forwarded-host'] || req.headers['host']) + : window.location.host; + host = host || defaultLocalhost + if (host.indexOf('localhost') > -1) { + if (defaultLocalhost) host = defaultLocalhost; + protocol = 'http:'; + } + + return { + protocol: protocol, + host: host, + origin: protocol + '//' + host + }; +}