UNPKG

coffee-express

Version:

A Template for NodeJs Application using Express, CoffeeScript, Jade, and Stylus.

38 lines (33 loc) 11.2 kB
<!DOCTYPE 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 &hellip; <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">&#182;</a> </div> <p>Routing</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">module.exports = </span><span class="nf">(app) -&gt;</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</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">&#39;/&#39;</span><span class="p">,</span> <span class="nf">(req, res, next)-&gt;</span> <span class="nx">routeMvc</span><span class="p">(</span><span class="s">&#39;index&#39;</span><span class="p">,</span> <span class="s">&#39;index&#39;</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">&#39;/:controller&#39;</span> <span class="p">,</span> <span class="nf">(req, res, next)-&gt;</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">&#39;index&#39;</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">&#39;/:controller/:method&#39;</span> <span class="p">,</span> <span class="nf">(req, res, next)-&gt;</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">&#39;/:controller/:method/:id&#39;</span> <span class="p">,</span> <span class="nf">(req, res, next)-&gt;</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">&#182;</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">&#39;/*&#39;</span><span class="p">,</span> <span class="nf">(req, res)-&gt;</span> <span class="nx">console</span><span class="p">.</span><span class="nx">warn</span> <span class="s">&quot;error 404: &quot;</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">&#39;404&#39;</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">&#182;</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)-&gt;</span> <span class="nx">console</span><span class="p">.</span><span class="nx">info</span> <span class="s">&quot;mvc page, controller: &quot;</span><span class="o">+</span><span class="nx">controllerName</span><span class="o">+</span><span class="s">&quot;, method: &quot;</span><span class="o">+</span><span class="nx">methodName</span><span class="o">+</span><span class="s">&quot;, id: &quot;</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">&#39;index&#39;</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">&quot;./controllers/&quot;</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">&quot;controller not found: &quot;</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">&#182;</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">&#39;&#39;</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">&#39;controller .&#39;</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)-&gt;</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">&quot;Controller&#39;s return value not implemented!&quot;</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">&#182;</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">&#182;</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">&#39;method not found: &#39;</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>