我决定尝试 contentful 的无头 CMS,但我遇到了他们的 API 客户端的问题。我想要做的是将 express 与服务器端渲染的 react 结合起来,我使用这个 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 );
}
我的反应组件
请求数据
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
express 内部的方法中。因为 contentful 的客户是一个承诺,我不确定如何getHeroesRoute
等待来自getHeroes
. 我怎样才能做到这一点?