为fluxible-router编写koa中间件(async executeAction)

时间:2015-06-18 19:24:36

标签: router koa fluxible

我试图使用koa和fluxible-router。 大多数表达示例使用类似的模式,但随后将send()直接用于navigateAction。

React.renderToString()获取在executeAction上下文中调用的正确的道具。



'use strict';

var React = require('react');
var app = require('./app');
var navigateAction = require('fluxible-router').navigateAction;

function render() {
  return function *render(next) {
    var context = app.createContext(
      {
        req: this.request
        , xhrContext: {
          _csrf: 'pino'
        }
      }
    );
    var html = null;
    context.executeAction(navigateAction, {
        method: this.request.method
        , url: this.request.url
    }, function (err) { // this function is executed asyncronously
      console.log('1');
      var html = React.renderToString(context.createElement());
    });
    this.body = html;
    console.log('2');
    yield* next;
  }
}

module.exports = render;




我发现填充道具的唯一方法是在executeAction()中运行renderToString(),但它会异步执行,以便console.log(' 2')之前执行console.log(' 1')和返回的正文为空。

我不知道有任何方法可以等待renderToString,也无法在正确的上下文中运行renderToString()。

感谢

1 个答案:

答案 0 :(得分:0)

这是一种方法

https://gist.github.com/cesarandreu/03f6c584a40c62812deb

或只是产生context.executeAction(...)