1.0Alex Rusin Bloghttps://blog.alexrusin.comAngularJS/NodeJS SPA | Alex Rusin Blogrich600338<blockquote class="wp-embedded-content" data-secret="iMVaZYewxB"><a href="https://blog.alexrusin.com/angularjsnodejs-spa/">AngularJS/NodeJS SPA</a></blockquote><iframe sandbox="allow-scripts" security="restricted" src="https://blog.alexrusin.com/angularjsnodejs-spa/embed/#?secret=iMVaZYewxB" width="600" height="338" title="“AngularJS/NodeJS SPA” — Alex Rusin Blog" data-secret="iMVaZYewxB" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"></iframe><script> /*! This file is auto-generated */ !function(d,l){"use strict";l.querySelector&&d.addEventListener&&"undefined"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i<o.length;i++)o[i].style.display="none";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute("style"),"height"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):"link"===t.message&&(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document); </script> https://blog.alexrusin.com/wp-content/uploads/2016/05/rlquiz-small.jpg270260This AngularJS single page application (SPA) is coded in AngularJS.  It is hosted on NodeJS Express server.  This quiz app is totally dynamic. Questions are fetched and assembled on the fly from MySQL database using API written in NodeJS and hosted on the same server.  Each time quiz is taken, questions are randomized and capped...