UNPKG

expressling

Version:
182 lines (173 loc) 70.1 kB
<!DOCTYPE html> <html> <head> <title>settings.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To &hellip; <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="server.html"> server.js </a> <a class="source" href="settings.html"> settings.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> settings.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">&#182;</a> </div> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</a> </div> <h1>Settings</h1> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">&#182;</a> </div> <h2>Express</h2> </td> <td class="code"> <div class="highlight"><pre><span class="kd">var</span> <span class="nx">express</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;express&#39;</span><span class="p">)</span> <span class="p">,</span> <span class="nx">port</span> <span class="o">=</span> <span class="mi">3000</span> <span class="p">,</span> <span class="nx">cacheAge</span> <span class="o">=</span> <span class="mi">24</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">1000</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">&#182;</a> </div> <h2>Common</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">fs</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;fs&#39;</span><span class="p">)</span> <span class="p">,</span> <span class="nx">colors</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;colors&#39;</span><span class="p">)</span> <span class="p">,</span> <span class="nx">mime</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;mime&#39;</span><span class="p">)</span> <span class="p">,</span> <span class="nx">gzippo</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;gzippo&#39;</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">&#182;</a> </div> <h1>Good and bad</h1> <p><strong>TODO:</strong> this should be added to Marak's <code>colors</code> (e.g. 'mystring'.bad -- which would prepend the red ✗)</p> <p>Don't use error/success since that <em>could</em> conflict with callbacks.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">good</span> <span class="o">=</span> <span class="s2">&quot; ✔ &quot;</span><span class="p">.</span><span class="nx">green</span> <span class="p">,</span> <span class="nx">bad</span> <span class="o">=</span> <span class="s2">&quot; ✗ &quot;</span><span class="p">.</span><span class="nx">red</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <h2>Config</h2> <p>Based on your project's needs, you should configure <code>package.json</code> accordingly to the <a href="http://npmjs.org">npm</a> packages used. <a href="http://wiki.commonjs.org/wiki/Packages/1.0">http://wiki.commonjs.org/wiki/Packages/1.0</a></p> <p>, config = require('./config')</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <h2>Mongo Session Store</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">MongoStore</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;connect-mongo&#39;</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">&#182;</a> </div> <h2>Cross Site Request Forgery</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">csrf</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;express-csrf&#39;</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">&#182;</a> </div> <h2>Stylesheets</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">stylus</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;stylus&#39;</span><span class="p">)</span> <span class="p">,</span> <span class="nx">nib</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;nib&#39;</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">&#182;</a> </div> <h2>Logs</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">logs</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">set</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">string</span><span class="o">:</span> <span class="s1">&#39;\\n &#39;</span> <span class="o">+</span> <span class="s1">&#39;:date&#39;</span><span class="p">.</span><span class="nx">bold</span><span class="p">.</span><span class="nx">underline</span> <span class="o">+</span> <span class="s1">&#39;\\n\\n&#39;</span> <span class="o">+</span> <span class="s1">&#39; IP: &#39;</span><span class="p">.</span><span class="nx">cyan</span><span class="p">.</span><span class="nx">bold</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="s1">&#39;:remote-addr&#39;</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">&#39;\\n&#39;</span> <span class="o">+</span> <span class="s1">&#39; Method: &#39;</span><span class="p">.</span><span class="nx">red</span><span class="p">.</span><span class="nx">bold</span> <span class="o">+</span> <span class="s1">&#39;:method&#39;</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">&#39;\\n&#39;</span> <span class="o">+</span> <span class="s1">&#39; URL: &#39;</span><span class="p">.</span><span class="nx">blue</span><span class="p">.</span><span class="nx">bold</span> <span class="o">+</span> <span class="s1">&#39;:url&#39;</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">&#39;\\n&#39;</span> <span class="o">+</span> <span class="s1">&#39; Status: &#39;</span><span class="p">.</span><span class="nx">yellow</span><span class="p">.</span><span class="nx">bold</span> <span class="o">+</span> <span class="s1">&#39;:status&#39;</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">&#39;\\n&#39;</span> <span class="o">+</span> <span class="s1">&#39; User Agent: &#39;</span><span class="p">.</span><span class="nx">magenta</span><span class="p">.</span><span class="nx">bold</span> <span class="o">+</span> <span class="s1">&#39;:user-agent&#39;</span><span class="p">.</span><span class="nx">white</span> <span class="p">}</span> <span class="p">,</span> <span class="nx">css</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">count</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">debug</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">set</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">string</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="s1">&#39;&#39;</span> <span class="o">+</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">good</span> <span class="o">+</span> <span class="s1">&#39; Stylus has detected changes and compiled new assets&#39;</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">count</span> <span class="o">+</span> <span class="s1">&#39; times so far&#39;</span> <span class="o">+</span> <span class="s1">&#39;\n&#39;</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">&#182;</a> </div> <h2>Set cache busting for development purposes as a view middleware helper</h2> <p>This gets turned off in production mode, see below</p> <p>(e.g. <code>views/layout.jade</code> uses this for appending .css/.js w/?v=timestamp)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">cacheBusting</span> <span class="o">=</span> <span class="kc">true</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">&#182;</a> </div> <h2>Stylus Compiler</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="p">,</span> <span class="nx">compress</span> <span class="o">=</span> <span class="kc">false</span> <span class="c1">// this is set to true in prod</span> <span class="p">,</span> <span class="nx">linenos</span> <span class="o">=</span> <span class="kc">true</span> <span class="c1">// this is set to false in prod</span> <span class="p">,</span> <span class="nx">compiler</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">path</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="nx">css</span><span class="p">.</span><span class="nx">set</span><span class="p">)</span> <span class="p">{</span> <span class="nx">css</span><span class="p">.</span><span class="nx">count</span><span class="o">++</span><span class="p">;</span> <span class="kd">var</span> <span class="nx">cssString</span> <span class="o">=</span> <span class="nx">css</span><span class="p">.</span><span class="nx">string</span><span class="p">();</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">cssString</span><span class="p">);</span> <span class="p">}</span> <span class="k">return</span> <span class="nx">stylus</span><span class="p">(</span><span class="nx">str</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;filename&#39;</span><span class="p">,</span> <span class="nx">path</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;compress&#39;</span><span class="p">,</span> <span class="nx">compress</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;warn&#39;</span><span class="p">,</span> <span class="kc">false</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;force&#39;</span><span class="p">,</span> <span class="kc">false</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;firebug&#39;</span><span class="p">,</span> <span class="kc">false</span><span class="p">)</span> <span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;linenos&#39;</span><span class="p">,</span> <span class="nx">linenos</span><span class="p">)</span> <span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">nib</span><span class="p">());</span> <span class="p">};</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">&#182;</a> </div> <h2>Helper functions</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">&#182;</a> </div> <p><a href="http://dailyjs.com/2010/12/06/node-tutorial-5/">Return existing connection info</a></p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">function</span> <span class="nx">mongoStoreConnectionArgs</span><span class="p">(</span><span class="nx">db</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="p">{</span> <span class="nx">db</span><span class="o">:</span> <span class="nx">db</span><span class="p">.</span><span class="nx">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">db</span><span class="p">.</span><span class="nx">databaseName</span> <span class="p">,</span> <span class="nx">host</span><span class="o">:</span> <span class="nx">db</span><span class="p">.</span><span class="nx">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">db</span><span class="p">.</span><span class="nx">serverConfig</span><span class="p">.</span><span class="nx">host</span> <span class="p">,</span> <span class="nx">port</span><span class="o">:</span> <span class="nx">db</span><span class="p">.</span><span class="nx">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">db</span><span class="p">.</span><span class="nx">serverConfig</span><span class="p">.</span><span class="nx">port</span> <span class="p">,</span> <span class="nx">username</span><span class="o">:</span> <span class="nx">db</span><span class="p">.</span><span class="nx">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">user</span> <span class="p">,</span> <span class="nx">password</span><span class="o">:</span> <span class="nx">db</span><span class="p">.</span><span class="nx">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">pass</span> <span class="p">};</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</a> </div> <p>Logout middleware helper</p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">function</span> <span class="nx">logout</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">next</span><span class="p">)</span> <span class="p">{</span> <span class="nx">req</span><span class="p">.</span><span class="nx">logout</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">delete</span> <span class="nx">req</span><span class="p">.</span><span class="nx">session</span><span class="p">.</span><span class="nx">auth</span><span class="p">;</span> <span class="p">};</span> <span class="nx">next</span><span class="p">();</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">&#182;</a> </div> <p>Login middleware helper</p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">function</span> <span class="nx">loggedIn</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">next</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">session</span><span class="p">.</span><span class="nx">auth</span><span class="p">)</span> <span class="p">{</span> <span class="nx">req</span><span class="p">.</span><span class="nx">loggedIn</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nx">req</span><span class="p">.</span><span class="nx">loggedIn</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> <span class="p">}</span> <span class="nx">next</span><span class="p">();</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">&#182;</a> </div> <p>Create a "super_admin" user and group if one does not already exist</p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">function</span> <span class="nx">createSuperAdmin</span><span class="p">(</span><span class="nx">db</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">Groups</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./schemas/groups&#39;</span><span class="p">)(</span><span class="nx">db</span><span class="p">)</span> <span class="p">,</span> <span class="nx">Users</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./schemas/users&#39;</span><span class="p">)(</span><span class="nx">db</span><span class="p">)</span> <span class="p">,</span> <span class="nx">superGroup</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="s2">&quot;super_admin&quot;</span> <span class="p">}</span> <span class="p">,</span> <span class="nx">superUser</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">email</span><span class="o">:</span> <span class="s2">&quot;admin@expressling.com&quot;</span> <span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="p">{</span> <span class="nx">first</span><span class="o">:</span> <span class="s2">&quot;SuperAdmin&quot;</span><span class="p">,</span> <span class="nx">last</span><span class="o">:</span> <span class="s2">&quot;McLovin&quot;</span> <span class="p">}</span> <span class="p">,</span> <span class="nx">company</span><span class="o">:</span> <span class="s2">&quot;Brogrammers LLC.&quot;</span> <span class="p">,</span> <span class="nx">password</span><span class="o">:</span> <span class="s2">&quot;admin&quot;</span> <span class="p">,</span> <span class="nx">_group</span><span class="o">:</span> <span class="nx">superGroup</span><span class="p">.</span><span class="nx">_id</span> <span class="p">};</span> <span class="nx">Groups</span><span class="p">.</span><span class="nx">count</span><span class="p">(</span><span class="nx">superGroup</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">count</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">count</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Groups</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">superGroup</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">group</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">group</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Users</span><span class="p">.</span><span class="nx">register</span><span class="p">(</span><span class="nx">superUser</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">user</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">bad</span> <span class="o">+</span> <span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">user</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">good</span> <span class="o">+</span> <span class="s2">&quot;&#39;super_admin&#39; user/group created&quot;</span><span class="p">);</span> <span class="p">});</span> <span class="p">}</span> <span class="p">});</span> <span class="p">}</span> <span class="p">});</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">&#182;</a> </div> <p>Create a "user" user and group if one does not already exist</p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">function</span> <span class="nx">createUser</span><span class="p">(</span><span class="nx">app</span><span class="p">,</span> <span class="nx">db</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">Groups</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./schemas/groups&#39;</span><span class="p">)(</span><span class="nx">db</span><span class="p">)</span> <span class="p">,</span> <span class="nx">Users</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./schemas/users&#39;</span><span class="p">)(</span><span class="nx">db</span><span class="p">)</span> <span class="p">,</span> <span class="nx">userGroup</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="s2">&quot;user&quot;</span> <span class="p">}</span> <span class="p">,</span> <span class="nx">defaultUser</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">email</span><span class="o">:</span> <span class="s2">&quot;user@expressling.com&quot;</span> <span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="p">{</span> <span class="nx">first</span><span class="o">:</span> <span class="s2">&quot;User&quot;</span><span class="p">,</span> <span class="nx">last</span><span class="o">:</span> <span class="s2">&quot;McLovin&quot;</span> <span class="p">}</span> <span class="p">,</span> <span class="nx">company</span><span class="o">:</span> <span class="s2">&quot;Users Rock Inc.&quot;</span> <span class="p">,</span> <span class="nx">password</span><span class="o">:</span> <span class="s2">&quot;user&quot;</span> <span class="p">,</span> <span class="nx">_group</span><span class="o">:</span> <span class="nx">userGroup</span><span class="p">.</span><span class="nx">_id</span> <span class="p">};</span> <span class="nx">Groups</span><span class="p">.</span><span class="nx">count</span><span class="p">(</span><span class="nx">userGroup</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">count</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">count</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Groups</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">userGroup</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">group</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">group</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Users</span><span class="p">.</span><span class="nx">register</span><span class="p">(</span><span class="nx">defaultUser</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">user</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">bad</span> <span class="o">+</span> <span class="nx">err</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">user</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">good</span> <span class="o">+</span> <span class="s2">&quot;&#39;user&#39; user/group created&quot;</span><span class="p">);</span> <span class="k">return</span> <span class="nx">group</span><span class="p">;</span> <span class="p">});</span> <span class="p">}</span> <span class="p">});</span> <span class="p">}</span> <span class="p">});</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">&#182;</a> </div> <h2>Application Configuration</h2> </td> <td class="code"> <div class="highlight"><pre><span class="nx">exports</span><span class="p">.</span><span class="nx">bootApplication</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">app</span><span class="p">,</span> <span class="nx">db</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">&#182;</a> </div> <h3>Create Super Admin</h3> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">createSuperAdmin</span><span class="p">(</span><span class="nx">db</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">&#182;</a> </div> <p>Create User Group</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">createUser</span><span class="p">(</span><span class="nx">app</span><span class="p">,</span> <span class="nx">db</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">&#182;</a> </div> <h3>Default Settings</h3> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">configure</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">&#182;</a> </div> <p>Views</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;views&#39;</span><span class="p">,</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/views&#39;</span><span class="p">);</span> <span class="nx">app</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;view engine&#39;</span><span class="p">,</span> <span class="s1">&#39;jade&#39;</span><span class="p">);</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">bodyParser</span><span class="p">());</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">methodOverride</span><span class="p">());</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">cookieParser</span><span class="p">());</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">&#182;</a> </div> <p>Load Mongo session store</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">session</span><span class="p">({</span> <span class="nx">secret</span><span class="o">:</span> <span class="s2">&quot;##### CHANGE THIS SECRET TO SOMETHING PRIVATE AND HASHED #####&quot;</span> <span class="p">,</span> <span class="nx">maxAge</span><span class="o">:</span> <span class="nx">cacheAge</span> <span class="p">,</span> <span class="nx">store</span><span class="o">:</span> <span class="k">new</span> <span class="nx">MongoStore</span><span class="p">(</span><span class="nx">mongoStoreConnectionArgs</span><span class="p">(</span><span class="nx">db</span><span class="p">))</span> <span class="p">}));</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">&#182;</a> </div> <p>Check for csrf using express-csrf module</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">csrf</span><span class="p">.</span><span class="nx">check</span><span class="p">());</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">&#182;</a> </div> <p>Favicon</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">favicon</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/public/favicon.ico&#39;</span><span class="p">));</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">&#182;</a> </div> <p>Extra Route Middleware</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">logout</span><span class="p">);</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">loggedIn</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-28">&#182;</a> </div> <p>Routing (keep this last)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">app</span><span class="p">.</span><span class="nx">router</span><span class="p">);</span> <span class="p">});</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-29">&#182;</a> </div> <h3>Development Settings</h3> <pre><code>For a quick start $ node server.js Or if you have installed nodemon via: $ npm install -g nodemon $ nodemon Then point your browser to &lt;http://localhost:8080/&gt;. </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">configure</span><span class="p">(</span><span class="s1">&#39;development&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">stylus</span><span class="p">.</span><span class="nx">middleware</span><span class="p">({</span> <span class="nx">src</span><span class="o">:</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/views&#39;</span><span class="p">,</span> <span class="nx">dest</span><span class="o">:</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/public&#39;</span><span class="p">,</span> <span class="nx">debug</span><span class="o">:</span> <span class="nx">css</span><span class="p">.</span><span class="nx">debug</span><span class="p">,</span> <span class="nx">compile</span><span class="o">:</span> <span class="nx">compiler</span> <span class="p">}));</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="kr">static</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/public&#39;</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxAge</span><span class="o">:</span> <span class="nx">cacheAge</span> <span class="p">}));</span> <span class="nx">app</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;showStackError&#39;</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">logs</span><span class="p">.</span><span class="nx">set</span><span class="p">)</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="nx">logger</span><span class="p">(</span><span class="nx">logs</span><span class="p">.</span><span class="nx">string</span><span class="p">));</span> <span class="p">});</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">&#182;</a> </div> <h3>Staging Settings</h3> <p><strong>TODO</strong>: Build out the configuration for this mode. <code>$ NODE_ENV=staging node server.js</code> Then point your browser to <a href="http://localhost:8081/">http://localhost:8081/</a>.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">&#182;</a> </div> <h3>Production Settings</h3> <p><code>$ NODE_ENV=production node server.js</code> Then point your browser to <a href="http://localhost/">http://localhost/</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">configure</span><span class="p">(</span><span class="s1">&#39;production&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="nx">cacheBusting</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> <span class="nx">compress</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> <span class="nx">linenos</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">stylus</span><span class="p">.</span><span class="nx">middleware</span><span class="p">({</span> <span class="nx">src</span><span class="o">:</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/views&#39;</span><span class="p">,</span> <span class="nx">dest</span><span class="o">:</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/public&#39;</span><span class="p">,</span> <span class="nx">debug</span><span class="o">:</span> <span class="nx">css</span><span class="p">.</span><span class="nx">debug</span><span class="p">,</span> <span class="nx">compile</span><span class="o">:</span> <span class="nx">compiler</span> <span class="p">}));</span></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-32">&#182;</a> </div> <p>Enable gzip compression is for production mode only</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">gzippo</span><span class="p">.</span><span class="nx">staticGzip</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/public&#39;</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxAge</span><span class="o">:</span> <span class="nx">cacheAge</span> <span class="p">}));</span></pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-33">&#182;</a> </div> <p>Disable stack error output</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s1">&#39;showStackError&#39;</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-34">&#182;</a> </div> <p>Enable view caching</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">enable</span><span class="p">(</span><span class="s1">&#39;view cache&#39;</span><span class="p">);</span> <span class="p">});</span></pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-35">&#182;</a> </div> <h3>Dynamic View Helpers</h3> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">dynamicHelpers</span><span class="p">({</span> <span class="nx">request</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">req</span><span class="p">;</span> <span class="p">},</span> <span class="nx">base</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-36">&#182;</a> </div> <p>Return the app's mount-point so that urls can adjust</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="s1">&#39;/&#39;</span> <span class="o">===</span> <span class="nx">app</span><span class="p">.</span><span class="nx">route</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">app</span><span class="p">.</span><span class="nx">route</span><span class="p">;</span> <span class="p">},</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-37">&#182;</a> </div> <p><a href="https://github.com/visionmedia/express-messages/">Flash messages</a></p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">messages</span><span class="o">:</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;express-messages&#39;</span><span class="p">),</span></pre></div> </td> </tr> <tr id="section-38"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-38">&#182;</a> </div> <p><a href="https://github.com/loopj/commonjs-date-formatting/">Dateformat helper</a></p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">dateformat</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./lib/dateformat&#39;</span><span class="p">).</span><span class="nx"