From f44390a3b52f05cf4e88a2fd66539b6138d0bb16 Mon Sep 17 00:00:00 2001 From: Chung Leong Date: Mon, 28 Jan 2019 11:11:49 +0100 Subject: [PATCH] Fixed pagination in CORS scenario (issue #24). --- server/json-retriever.js | 16 +++++++++++++--- server/nginx-ext/default.conf | 1 + server/nginx/default.conf | 1 + src/widgets/side-nav.jsx | 23 +++++++++++++++-------- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/server/json-retriever.js b/server/json-retriever.js index 619e98d..4a50198 100644 --- a/server/json-retriever.js +++ b/server/json-retriever.js @@ -3,19 +3,29 @@ const CrossFetch = require('cross-fetch'); const WORDPRESS_HOST = process.env.WORDPRESS_HOST; async function fetch(path) { + console.log(`Retrieving data: ${path}`); let url = `${WORDPRESS_HOST}${path}`; let res = await CrossFetch(url); - let object = await res.json(); + let resText = await res.text(); + let object; + try { + object = JSON.parse(resText); + } catch (err) { + // remove any error msg that got dumped into the output stream + resText = resText.replace(/^[^\{\[]+/, ''); + object = JSON.parse(resText); + } + let total = parseInt(res.headers.get('X-WP-Total')); removeSuperfluousProps(path, object); let text = JSON.stringify(object); - return { path, text }; + return { path, text, total }; } function removeSuperfluousProps(path, object) { if (object instanceof Array) { let objects = object; for (let object of objects) { - return removeSuperfluousProps(path, object); + removeSuperfluousProps(path, object); } } else if (object instanceof Object) { delete object._links; diff --git a/server/nginx-ext/default.conf b/server/nginx-ext/default.conf index ea9bb94..3bbe298 100644 --- a/server/nginx-ext/default.conf +++ b/server/nginx-ext/default.conf @@ -18,6 +18,7 @@ server { proxy_ignore_headers Cache-Control Expires Set-Cookie; add_header Access-Control-Allow-Origin *; + add_header Access-Control-Expose-Headers X-WP-Total; add_header Cache-Control "public,max-age=0"; add_header X-Cache-Date $upstream_http_date; add_header X-Cache-Status $upstream_cache_status; diff --git a/server/nginx/default.conf b/server/nginx/default.conf index 6e2c705..704843b 100644 --- a/server/nginx/default.conf +++ b/server/nginx/default.conf @@ -29,6 +29,7 @@ server { proxy_ignore_headers Cache-Control Expires Set-Cookie; add_header Access-Control-Allow-Origin *; + add_header Access-Control-Expose-Headers X-WP-Total; add_header Cache-Control "public,max-age=0"; add_header X-Cache-Date $upstream_http_date; add_header X-Cache-Status $upstream_cache_status; diff --git a/src/widgets/side-nav.jsx b/src/widgets/side-nav.jsx index 336aa8e..b76937b 100644 --- a/src/widgets/side-nav.jsx +++ b/src/widgets/side-nav.jsx @@ -93,20 +93,27 @@ class SideNav extends AsyncComponent { meanwhile.show(); // load the posts of each category - for (let category of props.categories) { - if (category.count > 0) { - let url = `/wp/v2/posts/?categories=${category.id}`; - await wp.fetchList(url); + try { + for (let category of props.categories) { + if (category.count > 0) { + let url = `/wp/v2/posts/?categories=${category.id}`; + await wp.fetchList(url); + } } + } catch (err) { } // load the posts of each tag - for (let tag of props.tags) { - if (tag.count > 0) { - let url = `/wp/v2/posts/?tags=${tag.id}`; - await wp.fetchList(url); + try { + for (let tag of props.tags) { + if (tag.count > 0) { + let url = `/wp/v2/posts/?tags=${tag.id}`; + await wp.fetchList(url); + } } + } catch (err) { } + return ; }