You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
filepizza/lib/middleware/react.js

31 lines
665 B
JavaScript

var React = require('react')
var ReactRouter = require('react-router')
var alt = require('../alt')
var routes = require('../routes')
function isNotFound(state) {
for (var r of state.routes) {
if (r.isNotFound) return true
}
return false
}
module.exports = function (req, res) {
alt.bootstrap(JSON.stringify(res.locals.data || {}))
ReactRouter.run(routes, req.url, function (Handler, state) {
var html = React.renderToString(<Handler data={alt.takeSnapshot()} />)
alt.flush()
res.setHeader('Content-Type', 'text/html');
if (isNotFound(state)) res.status(404)
res.write('<!DOCTYPE html>\n')
res.end(html)
})
}