我正在尝试使用 Isomorphic React 构建内容管理系统。我要确定的是如何使用 RESTful 请求响应对象定义路由。
我正在查看 React Starter Kit 中的路由模块,但我不了解路由对象的逻辑,因为我不熟悉它的使用语法。看起来孩子们是一组承诺,并且异步执行每个承诺。然而const route = await next(); 将产生与路线相关的所有数据。这里是否发生了一些路由匹配逻辑?
从 server.js 调用路由模块
const route = await UniversalRouter.resolve(routes, {
path: req.path,
query: req.query,
});
这是 index.js 中的定义,它位于每个路由的父目录中。
/* eslint-disable global-require */
// The top-level (parent) route
export default {
path: '/',
// Keep in mind, routes are evaluated in order
children: [
require('./home').default,
require('./contact').default,
require('./login').default,
require('./register').default,
require('./about').default,
require('./privacy').default,
require('./admin').default,
// Wildcard routes, e.g. { path: '*', ... } (must go last)
require('./notFound').default,
],
async action({ next }) {
// Execute each child route until one of them return the result
const route = await next();
// Provide default values for title, description etc.
route.title = `${route.title || 'Untitled Page'} - www.reactstarterkit.com`;
route.description = route.description || '';
return route;
},
};
我尝试合并的 RESTful 请求适用于我的 server.js 或当我将其放入异步操作时。
const routeList = await fetch('/graphql', {
method: 'post',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: '{routes{path,page,chunk,data{articles}}}',
}),
credentials: 'include',
});
const routeData = await routeList.json();
if (!routeData || !routeData.data || !routeData.data.routes) throw new Error('Failed to load the routes.');
console.log(JSON.stringify(routeData, null, 2));