express-turnout v0.0.4-alpha
expressTurnout

Pre-rendering Single-Page-Application for crawlers.
Setup
Install phantomjs 2.0.0 or Build
λ phantomjs -v # 2.0.0
Or
$ phantomjs -v # 2.0.0
Install modules
$ npm install express express-turnout --save
Use express-turnout before routing.
Example:
// Environment var port= 59798; // Dependencies var express= require('express'); var turnout= require('express-turnout'); // Setup express var app= express(); app.use(turnout()); app.use(function(req, res) { res.sendFile(__dirname + '/index.html'); }); app.listen(port, function() { console.log('listening at %s', port); });
Add below to <head> in index.html:
<script src="/express-turnout.js"></script>
Finally, Execute window.expressTurnoutRendered() at Timing of Should be read for crawlers.
Example:
angular.module('myApp',['ui.router']) .run(function($rootScope,$window){ $rootScope.$on('$viewContentLoaded',function(){ var renderedTemplate= document.body.innerHTML.trim().length>0 if(renderedTemplate){ $window.expressTurnoutRendered(); } }); }) .config(function($stateProvider){ // states... }) ;
How it works the source code for crawlers?
Add '?escaped_fragment' to URL.
Example:
$ curl http://localhost:59798/?_escaped_fragment_
<html lang="en" ng-app="myApp" class="ng-scope"><head><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}</style>
<meta charset="UTF-8">
<title>Welcome googlebot!</title>
<base href="/">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.14/angular-ui-router.js"></script>
<script src="/express-turnout.js"></script>
<script>
//...
</script>
</head>
<!-- uiView: --><body ui-view="" class="ng-scope"><h1 class="ng-scope">first</h1><a ui-sref="second" class="ng-scope" href="/second">second</a></body></html>
API
express-turnout(options)
Options
blacklist
Return 403 If matched URL in RegExps.
Default: []
whitelist
Return 403 Unless matched URL in RegExps.
Default: []
timeout
Return 403 if exceeded the time.
Default: 1000
ms
maxBuffer
Return 500 if rendered html is more than the number of bytes.
Default: 1000
ms
ua
Do Pre-rendering If matched UserAgent in RegExps.
Default: ['Googlebot','Twitterbot']
DEBUG=express:turnout
Example:
$ curl -A Googlebot http://localhost:59798/second
$ DEBUG=express:turnout node test/examples/angular-ui-router
# express:turnout new Turnout +0ms {"ua":["Googlebot","Twitterbot"],"blacklist":[],"whitelist":[],"timeout":1000,"eventName":"expressTurnoutRendered"}
# express:turnout [ 'Googlebot', index: 0, input: 'Googlebot' ] +1m isBot Googlebot
# express:turnout Render http://localhost:59798/second? Limit by 1000ms +2ms
# express:turnout Rendered +298ms <html lang="en" ng-app="myApp" class="ng-scope">...<!-- uiView: --><body ui-view="" class="ng-scope"><h1 class="ng-scope">second</h1><a ui-sref="first" class="ng-scope" href="">first</a></body></html>
/express-turnout.js
window.expressTurnoutRendered
Finish the Pre-rendering If Execute via express-turnout.
Inspired
prerender-node / AngularJS SEO with Prerender.io | Scotch
License
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago