2016-10-03 9 views
1

私はisomorphoc反応/フラックスアプリケーションで作業しており、コンテンツをレンダリングするためにswigを使用しています。 しかし、私がサイトを開くと、実際にコンテンツをindex.htmlファイルにレンダリングする前に、{{ html|safe }}出力タグの空白ページが最初に表示されます。Swigテンプレートは、コンテンツをレンダリングする前に出力タグを表示します。

私server.jsのコードは次のようになります。

res.status(200).send(swig.renderFile(__dirname + '/public/index.html', {html: html}));

私はこれを防ぐことができますどのように任意のアイデアを?また、これはサーバサイドレンダリングを防止しますか?ページをクロールするとき、Googleクローラは出力タグのみを表示しますか?

ありがとうございます。

編集:

require('babel-register'); 

var express = require('express'); 
var app = express(); 
var compression = require('compression'); 

var path = require('path'); 
var http = require('http'); 
var swig = require('swig'); 
var React = require('react'); 
var ReactDOM = require('react-dom/server'); 
var Router = require('react-router'); 
var routes = require('./app/routes'); 

app.use(compression()); 

app.use(express.static(path.join(__dirname, 'public'))); 

// create react router 
app.use(function(req, res){ 
    Router.match(
     { 
      routes: routes.default, 
      location: req.url 
     }, 
     function(err, redirectLocation, renderProps){ 
      if(err){ 
       res.status(500).send(err.message); 
      } else if(redirectLocation){ 
       res.status(302).redirect(redirectLocation.pathname +  redirectLocation.search); 
      } else if(renderProps){ 
       var html = ReactDOM.renderToString(React.createElement(Router.RouterContext, renderProps)); 
      var page = swig.renderFile(__dirname + '/public/index.html', {html: html}); 
      res.status(200).send(page); 
     } else { 
      res.status(404).send('Page not found'); 
     } 
    } 
); 
}); 
// and so on ... 

そして、ここでは私のroutes.jsある

import React from 'react'; 
import { Route } from 'react-router'; 
import App from './components/App'; 
import Home from './components/Home'; 

export default (
    <Route component={App}> 
     <Route path="/" component={Home} /> 
    </Route> 
); 
+0

関連するコードの詳細を表示できますか?具体的にはres.status ...のどこからapp.getを取得できますか?/public /ディレクトリも公開されていますか? – Molda

+0

コードを追加しました。この問題は、動作していないということではなく、コンテンツがレンダリングされる前に1秒間swig出力タグが表示されるという問題があります。 – eScoo

+0

私は、物事は '{{html | safe}}'というサーバーが決してサーバから離れるべきではないことを理解しています。 swigはサーバ上でそれを置き換えなければならないので、クライアントに到達するべきではありません。 'res.status(200).send(page);の前にconsole.log( 'HTML'、page)を追加します。それはすべきではありません! – Molda

答えて

0

のindex.htmlが問題でした。 "site.html"に改名されました。サーバー側のレンダリングはルートルート上で動作し、swigタグは表示されません。

関連する問題