isomorphoc react / flux 앱에서 작업 중이며 swig를 사용하여 콘텐츠를 렌더링합니다. 그러나 사이트를 열면 {{ html|safe }}
실제 콘텐츠를 index.html 파일로 렌더링하기 전에 먼저 출력 태그가 있는 빈 페이지가 표시 됩니다.
내 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>
);
index.html이 문제였습니다. 이름을 "site.html"로 변경했으며 이제 서버 측 렌더링이 루트 경로에서 작동하며 swig 태그가 표시되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다