expressling
Version:
Expressling
182 lines (173 loc) • 70.1 kB
HTML
<!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 … <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">¶</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">¶</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">¶</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">'express'</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">¶</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">'fs'</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">'colors'</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">'mime'</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">'gzippo'</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">¶</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">" ✔ "</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">" ✗ "</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">¶</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">¶</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">'connect-mongo'</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">¶</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">'express-csrf'</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">¶</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">'stylus'</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">'nib'</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">¶</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">'\\n '</span> <span class="o">+</span> <span class="s1">':date'</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">'\\n\\n'</span> <span class="o">+</span> <span class="s1">' IP: '</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">' '</span> <span class="o">+</span> <span class="s1">':remote-addr'</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">'\\n'</span> <span class="o">+</span> <span class="s1">' Method: '</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">':method'</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">'\\n'</span> <span class="o">+</span> <span class="s1">' URL: '</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">':url'</span><span class="p">.</span><span class="nx">white</span>
<span class="o">+</span> <span class="s1">'\\n'</span> <span class="o">+</span> <span class="s1">' Status: '</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">':status'</span><span class="p">.</span><span class="nx">white</span> <span class="o">+</span> <span class="s1">'\\n'</span>
<span class="o">+</span> <span class="s1">' User Agent: '</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">':user-agent'</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">''</span>
<span class="o">+</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">good</span> <span class="o">+</span> <span class="s1">' Stylus has detected changes and compiled new assets'</span>
<span class="o">+</span> <span class="s1">' '</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">' times so far'</span> <span class="o">+</span> <span class="s1">'\n'</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">¶</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">¶</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">'filename'</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">'compress'</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">'warn'</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">'force'</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">'firebug'</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">'linenos'</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">¶</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">¶</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">¶</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">¶</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">¶</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">'./schemas/groups'</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">'./schemas/users'</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">"super_admin"</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">"admin@expressling.com"</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">"SuperAdmin"</span><span class="p">,</span> <span class="nx">last</span><span class="o">:</span> <span class="s2">"McLovin"</span> <span class="p">}</span>
<span class="p">,</span> <span class="nx">company</span><span class="o">:</span> <span class="s2">"Brogrammers LLC."</span>
<span class="p">,</span> <span class="nx">password</span><span class="o">:</span> <span class="s2">"admin"</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">"'super_admin' user/group created"</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">¶</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">'./schemas/groups'</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">'./schemas/users'</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">"user"</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">"user@expressling.com"</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">"User"</span><span class="p">,</span> <span class="nx">last</span><span class="o">:</span> <span class="s2">"McLovin"</span> <span class="p">}</span>
<span class="p">,</span> <span class="nx">company</span><span class="o">:</span> <span class="s2">"Users Rock Inc."</span>
<span class="p">,</span> <span class="nx">password</span><span class="o">:</span> <span class="s2">"user"</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">"'user' user/group created"</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">¶</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">¶</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">¶</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">¶</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">¶</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">'views'</span><span class="p">,</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">'/views'</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">'view engine'</span><span class="p">,</span> <span class="s1">'jade'</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">¶</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">"##### CHANGE THIS SECRET TO SOMETHING PRIVATE AND HASHED #####"</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">¶</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">¶</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">'/public/favicon.ico'</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">¶</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">¶</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">¶</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 <http://localhost:8080/>.
</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">'development'</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">'/views'</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">'/public'</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">'/public'</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">'showStackError'</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">¶</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">¶</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">'production'</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">'/views'</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">'/public'</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">¶</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">'/public'</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">¶</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">'showStackError'</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">¶</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">'view cache'</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">¶</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">¶</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">'/'</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">''</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">¶</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">'express-messages'</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">¶</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">'./lib/dateformat'</span><span class="p">).</span><span class="nx"