Reactjs 在Web API中定义同构反应路由

Reactjs 在Web API中定义同构反应路由,reactjs,isomorphic-javascript,react-starter-kit,isomorphic,Reactjs,Isomorphic Javascript,React Starter Kit,Isomorphic,我试图建立一个内容管理系统与同构反应。我试图确定的是如何使用RESTful请求-响应对象定义路由 我正在查看React Starter工具包中的routes模块,我不理解route对象的逻辑,因为它使用的语法我不熟悉。看起来,子对象是一个承诺数组,异步执行每个承诺。然而,const route=等待下一步();将生成与路线关联的所有数据。这里是否存在一些路由匹配逻辑 路由模块是从server.js调用的 const route = await UniversalRouter.resolve(ro

我试图建立一个内容管理系统与同构反应。我试图确定的是如何使用RESTful请求-响应对象定义路由

我正在查看React Starter工具包中的routes模块,我不理解route对象的逻辑,因为它使用的语法我不熟悉。看起来,子对象是一个承诺数组,异步执行每个承诺。然而,const route=等待下一步();将生成与路线关联的所有数据。这里是否存在一些路由匹配逻辑

路由模块是从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));

反应起动套件。所有路由都只是具有“路径”、“操作”和(可选)“子对象”属性的JS对象,因此您可以随意操作它们

你所说的“魔法”只是一个例子。因此,数据实际上是从首先匹配的任何子路由(home、contact、login等)获取的

我不是100%确定实现所需的获取路由样式的最佳方法,但可以在注入路由之前实现。在src/client.js(第103行附近)中,类似于:

注意:这是未经测试,但它应该给你一个基础开始

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();
routeData.data.routes.forEach((route) => {
    routes.children.push({
       path: route.path,
       action() {
         return <Page>Render your page here</Page>;
       }
    })
})

const route = await UniversalRouter.resolve(routes, {
  ...context,
  path: location.pathname,
  query: queryString.parse(location.search),
});
const routeList=wait fetch(“/graphql”{
方法:“post”,
标题:{
接受:'application/json',
“内容类型”:“应用程序/json”,
},
正文:JSON.stringify({
查询:“{routes{path,page,chunk,data{articles}}”,
}),
凭据:“包括”,
});
const routeData=await routeList.json();
RoutedData.data.routes.forEach((路由)=>{
推({
路径:route.path,
行动(){
返回并在此处呈现您的页面;
}
})
})
const route=wait UniversalRouter.resolve(路由、{
上下文
路径:location.pathname,
查询:queryString.parse(location.search),
});

反应起动机套件机具。所有路由都只是具有“路径”、“操作”和(可选)“子对象”属性的JS对象,因此您可以随意操作它们

你所说的“魔法”只是一个例子。因此,数据实际上是从首先匹配的任何子路由(home、contact、login等)获取的

我不是100%确定实现所需的获取路由样式的最佳方法,但可以在注入路由之前实现。在src/client.js(第103行附近)中,类似于:

注意:这是未经测试,但它应该给你一个基础开始

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();
routeData.data.routes.forEach((route) => {
    routes.children.push({
       path: route.path,
       action() {
         return <Page>Render your page here</Page>;
       }
    })
})

const route = await UniversalRouter.resolve(routes, {
  ...context,
  path: location.pathname,
  query: queryString.parse(location.search),
});
const routeList=wait fetch(“/graphql”{
方法:“post”,
标题:{
接受:'application/json',
“内容类型”:“应用程序/json”,
},
正文:JSON.stringify({
查询:“{routes{path,page,chunk,data{articles}}”,
}),
凭据:“包括”,
});
const routeData=await routeList.json();
RoutedData.data.routes.forEach((路由)=>{
推({
路径:route.path,
行动(){
返回并在此处呈现您的页面;
}
})
})
const route=wait UniversalRouter.resolve(路由、{
上下文
路径:location.pathname,
查询:queryString.parse(location.search),
});

谢谢,我最终创造了一些类似的东西,但这有助于我理解自己在做什么。谢谢,我最终创造了一些类似的东西,但这有助于我理解自己在做什么。