Я решил попробовать безголовую CMS от Contentful, и у меня возникла проблема с их клиентом API. Я пытаюсь выйти замуж за экспресс с реакцией на рендеринг на стороне сервера, и я использую this repo в качестве отправной точки.
Мой экспресс-роутер
Создайте маршрут, который может вызывать мой компонент React:
createApiRouter(app) {
const router = express.Router();
this.createHeroesRoute(router);
// this.createDetailedBillRoute(router);
return router;
},
createHeroesRoute(router) {
router.get('/get-heroes', (req, res) => {
this.getHeroes((err, data) => {
if(!err) {
res.json(data);
} else {
res.status(500).send(err);
}
});
});
},
Получите данные из Contentful
getHeroes(callback) {
contentfulClient.getEntries({content_type: 'sectionHeroes'})
.then((entries) => {
//serilizations is a custom data serializer to format this data, it's working fine
return JSON.parse(serializations.serializeMainSection(entries.items[0]))
})
.catch((error) => error );
}
Компонент My React
Запросить данные
static requestData(params, domain = '') {
return axios.get(`${domain}/api/get-heroes`);
}
Установите состояние компонента на полученные данные
componentDidMount() {
this.constructor.requestData().then((response) => {
this.setState(response.data);
}).catch((err) => {
throw new Error(err);
});
}
Сбой происходит в getHeroes
методе внутри экспресса. Поскольку клиент contentful - это обещание, я не знаю, как заставить getHeroesRoute
ждать ответа от getHeroes
. Как я могу это сделать?
node-rest-client
и сам создаю контентные абстракции. Я все еще хотел бы точно знать, почему ответы, основанные на обещаниях, не работают, но для меня это больше не проблема. - person thatgibbyguy   schedule 12.08.2016