私は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>
);
関連するコードの詳細を表示できますか?具体的にはres.status ...のどこからapp.getを取得できますか?/public /ディレクトリも公開されていますか? – Molda
コードを追加しました。この問題は、動作していないということではなく、コンテンツがレンダリングされる前に1秒間swig出力タグが表示されるという問題があります。 – eScoo
私は、物事は '{{html | safe}}'というサーバーが決してサーバから離れるべきではないことを理解しています。 swigはサーバ上でそれを置き換えなければならないので、クライアントに到達するべきではありません。 'res.status(200).send(page);の前にconsole.log( 'HTML'、page)を追加します。それはすべきではありません! – Molda