coffee-express
Version:
A Template for NodeJs Application using Express, CoffeeScript, Jade, and Stylus.
38 lines (33 loc) • 11.2 kB
HTML
<html> <head> <title>routes.coffee</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="index.html"> index.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="posts.html"> posts.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="post.html"> post.coffee </a> <a class="source" href="routes.html"> routes.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> routes.coffee </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> <p>Routing</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">module.exports = </span><span class="nf">(app) -></span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>MVC pages</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">all</span> <span class="s">'/'</span><span class="p">,</span> <span class="nf">(req, res, next)-></span>
<span class="nx">routeMvc</span><span class="p">(</span><span class="s">'index'</span><span class="p">,</span> <span class="s">'index'</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="nx">app</span><span class="p">.</span><span class="nx">all</span> <span class="s">'/:controller'</span> <span class="p">,</span> <span class="nf">(req, res, next)-></span>
<span class="nx">routeMvc</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">controller</span><span class="p">,</span> <span class="s">'index'</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="nx">app</span><span class="p">.</span><span class="nx">all</span> <span class="s">'/:controller/:method'</span> <span class="p">,</span> <span class="nf">(req, res, next)-></span>
<span class="nx">routeMvc</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">controller</span><span class="p">,</span> <span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">method</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="nx">app</span><span class="p">.</span><span class="nx">all</span> <span class="s">'/:controller/:method/:id'</span> <span class="p">,</span> <span class="nf">(req, res, next)-></span>
<span class="nx">routeMvc</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">controller</span><span class="p">,</span> <span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">method</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></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>If all else failed, show 404 page</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">app</span><span class="p">.</span><span class="nx">all</span> <span class="s">'/*'</span><span class="p">,</span> <span class="nf">(req, res)-></span>
<span class="nx">console</span><span class="p">.</span><span class="nx">warn</span> <span class="s">"error 404: "</span><span class="p">,</span> <span class="nx">req</span><span class="p">.</span><span class="nx">url</span>
<span class="nx">res</span><span class="p">.</span><span class="nx">render</span> <span class="s">'404'</span><span class="p">,</span><span class="mi">404</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>render the page based on controller, method and id</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">routeMvc = </span><span class="nf">(controllerName, methodName, req, res, next)-></span>
<span class="nx">console</span><span class="p">.</span><span class="nx">info</span> <span class="s">"mvc page, controller: "</span><span class="o">+</span><span class="nx">controllerName</span><span class="o">+</span><span class="s">", method: "</span><span class="o">+</span><span class="nx">methodName</span><span class="o">+</span><span class="s">", id: "</span><span class="o">+</span><span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">id</span>
<span class="nx">controllerName</span><span class="o">=</span><span class="s">'index'</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">controllerName</span><span class="o">?</span>
<span class="nx">controller</span><span class="o">=</span><span class="kc">null</span>
<span class="k">try</span>
<span class="nx">controller</span><span class="o">=</span><span class="nx">require</span> <span class="s">"./controllers/"</span><span class="o">+</span><span class="nx">controllerName</span>
<span class="k">catch</span> <span class="nx">e</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">warn</span> <span class="s">"controller not found: "</span><span class="o">+</span> <span class="nx">controllerName</span><span class="p">,</span> <span class="nx">e</span>
<span class="nx">next</span><span class="p">()</span>
<span class="k">return</span>
<span class="nx">data</span><span class="o">=</span><span class="kc">null</span>
<span class="k">if</span> <span class="nx">methodName</span><span class="o">?</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>eval is evil, so sanitize it</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">methodName = </span><span class="nx">methodName</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/[^a-z0-9A-Z_-]/i</span><span class="p">,</span><span class="s">''</span><span class="p">)</span>
<span class="nx">method</span><span class="o">=</span><span class="nb">eval</span><span class="p">(</span><span class="s">'controller .'</span><span class="o">+</span><span class="nx">methodName</span><span class="p">)</span>
<span class="k">if</span> <span class="nx">method</span><span class="o">?</span>
<span class="nv">data = </span><span class="p">{}</span>
<span class="nx">method</span> <span class="nx">req</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span> <span class="nf">(isApi)-></span>
<span class="k">if</span> <span class="o">not</span> <span class="nx">data</span><span class="o">?</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s">"Controller's return value not implemented!"</span><span class="p">)</span>
<span class="k">if</span> <span class="nx">isApi</span> </pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>send JSON based on api</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">res</span><span class="p">.</span><span class="nx">send</span> <span class="nx">data</span>
<span class="k">else</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>render page</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">res</span><span class="p">.</span><span class="nx">render</span> <span class="nx">controllerName</span><span class="p">,</span> <span class="nx">data</span>
<span class="k">else</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">warn</span> <span class="s">'method not found: '</span> <span class="o">+</span><span class="nx">methodName</span>
<span class="nx">next</span><span class="p">()</span>
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>