contentful のヘッドレス CMS を試してみることにしましたが、API クライアントで問題が発生しています。私がやろうとしているのは、サーバー側のレンダリングのためにエクスプレスと反応を結婚させることであり、このレポを出発点として使用しています。
私の高速ルーター
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 );
}
私の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
Express 内のメソッドで障害が発生しています。contentful の client は promise であるため、getHeroesRoute
からの戻りを待機させる方法がわかりませんgetHeroes
。これどうやってするの?