请求JSON文件内容的空GET响应koa2

时间:2018-05-07 14:51:22

标签: json node.js koa koa2

我是koa2的新手,我试图用koa2获取JSON文件的内容

app.use( async ( ctx ) => { 
  let url = ctx.request.url;
  if (url == "list") {
      let res = ctx.request.get('http://domain/hello.json');
      ctx.body = res.body;
  }
})

JSON文件hello.json如下所示:

{"da": "1212", "dad": "12addsf12"}

我希望路由/list返回hello.json的内容,但响应为空。我该怎么办?

更新: 更改以下代码行:

 let res = ctx.request.get('http://domain/hello.json');
 ctx.body = res.body;

为:

 let res = ctx.get('http://domain/hello.json');
 ctx.body = res;

您应该立即获取内容。

2 个答案:

答案 0 :(得分:0)

Koa本身不支持路由,只有中间件,你需要有一个路由器中间件,试试koa-router

您的应用看起来像

const route = require('koa-route')

app.use(route.get('/list', ctx => {
    // Route handling logic
});

另请注意,ctx.getctx.request.get的别名,它返回标头信息。

答案 1 :(得分:0)

这可能不是Koa的做事方式,但这是我为我尝试和工作的东西(像我这样的新手的完整代码):

class ElementCRDN extends React.Component {
    constructor(props) {
        super(props);
        this.handleCreation = this.handleCreation.bind(this);
        this.handleInput = this.handleInput.bind(this);
        this.state = {
            data: [], // the data retrieved from the server
            pages: -1,
       };
   }

   handleCreation(event) {
        Axios.post('/createElement', {
            // data
        }).then(() => {
            // Ask for reload
       });
       event.preventDefault();
   }

   render() {
       <form onSubmit={this.handleCreation}>
           // input to create object
       </form>
       <ReactTable
          data={this.state.data}
          pages={this.state.pages}
          loading={this.state.loading}
          manual
          columns={columns}
          onFetchData={(state) => { // function to retrieve the data
              this.setState({ loading: true });
              Axios.post('/listElements', {
                  page: state.page,
                  pageSize: state.pageSize,
                  sorted: state.sorted,
                  filtered: state.filtered,
              }).then((res) => {
                  this.setState({
                  data: res.data,
                  loading: false,
                  });
              });
          }}
       />
   }

而且,正如source code指出的那样,Koa本身并不支持路由。您需要使用一些路由中间件。