Repository URL to install this package:
|
Version:
2.0.0-beta.20 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @file React application middleware, supports server side rendering.
* @see https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup
*/
var exotic_1 = require("exotic");
var router_1 = require("@skava/router");
var cacheMiddleware_1 = require("../middleware/cacheMiddleware");
var renderWithServerSide_1 = require("./renderWithServerSide");
exports.render = renderWithServerSide_1.renderUsingServerSideRendering;
var renderWithoutServerSide_1 = require("./renderWithoutServerSide");
var responders_1 = require("./responders");
/**
* this is the critical first step so we can have a url on the server
*/
function setOneRouterUrl(req) {
router_1.oneRouter.oneUrl = req.oneUrl;
router_1.oneRouter.urlFromExpress = req.oneUrl || {
full: 'webpack_hmr',
};
}
function reactApplicationMiddleware(req, res) {
setOneRouterUrl(req);
/**
* @todo - probably want to add a header
*/
if (req.SHOULD_CACHE_SSR) {
var success = cacheMiddleware_1.fromReqResToRespondFromCacheExistence(req, res);
if (success === true) {
return;
}
}
/**
* Ensure a nonce has been provided to us.
* @see server/middleware/security.js for more info.
*/
var nonce = res.locals.nonce;
if (!exotic_1.isString(nonce)) {
console.warn('@todo - no nonce');
// throw new Error('A "nonce" value has not been attached to the res')
}
/**
* It's possible to disable SSR, which can be useful in development mode.
* In this case traditional client side only rendering will occur.
*/
if (process.env.DISABLE_SSR === 'true') {
console.log('[ssr] DISABLED!!!', { requestUrl: router_1.oneRouter.urlFromExpress });
renderWithoutServerSide_1.renderWithoutServerSide(res, nonce);
}
else {
console.debug('[ssr] ==> Handling react route __WITH__ SSR');
console.info({ requestUrl: router_1.oneRouter.urlFromExpress });
try {
renderWithServerSide_1.renderUsingServerSideRendering(req, res, nonce);
}
catch (renderingException) {
console.error('[EXCEPTION_ALERT] [ssr] renderingException: ', renderingException);
responders_1.respondError(res, renderingException);
}
}
}
exports.reactApplicationMiddleware = reactApplicationMiddleware;
exports.reactApplication = reactApplicationMiddleware;
exports.default = reactApplicationMiddleware;
//# sourceMappingURL=reactApplication.js.map