1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wb="http://open.weibo.com/wb" lang="zh-CN" xml:lang="zh-CN"> 3<head> 4 5 <title>Hong's Blog, 使ç¨Node.jsæå»ºä¸ä¸ªç®åçéææä»¶serverã</title> 6 7 <meta name="viewport" content="width=device-width, initial-scale=1"/> 8 <meta name="description" content="Hongçä¸ªäººï¼ææ¯ï¼å客/Hong's personal (tech) blog" /> 9 <meta name="keywords" content="personal blog, tech-blog" /> 10 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 11 <meta property="wb:webmaster" content="6861c9cd3b457cad" /> 12 13 <link rel="icon" type="image/x-icon" href="/favicon.ico" /> 14 15 <link rel="stylesheet" href="../css/bootstrap.min.css" /> 16 <link rel="stylesheet" href="../css/default.css" type="text/css" media="screen" /> 17 <link rel="stylesheet" href="../css/index.css" type="text/css" media="screen" /> 18 <link rel="stylesheet" href="../css/post.css" type="text/css" media="screen" /> 19 <link rel="stylesheet" href="../css/tags.css" type="text/css" media="screen" /> 20 <link rel="stylesheet" href="../css/prism.css" /> 21 <link rel="stylesheet" href="../css/syntax.css" /> 22 23
23<script src="/script/jquery-1.11.3.min.js" type="text/javascript"></script>
23 24
24<script src="/script/bootstrap.min.js" type="text/javascript"></script>
24 25
25<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js" type="text/javascript" charset="utf-8"></script>
25 26 27 <!-- Google Analytics BEG--> 28
28<script type="text/javascript"> 29 var _gaq = _gaq || []; 30 _gaq.push(['_setAccount', 'UA-39298232-1']); 31 _gaq.push(['_trackPageview']); 32 33 (function() { 34 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 35 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 36 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 37 })(); 38 </script>
38 39 <!-- Google Analytics END--> 40</head> 41 42<body> 43 <div class="banner banner-top"> </div> 44 45 <div class="body-wrap"> 46 <div id="header"> 47 <nav class="navbar navbar-default"> 48 <div class="container-fluid"> 49 <div class="site-titles"> 50 <p id="site-title">Hong's Blog</p> 51 <p id="site-subtitle">Be Agile. Be Smart. Be Visionary. Be Dedicated.</p> 52 </div> 53 <!-- Brand and toggle get grouped for better mobile display --> 54 <div class="navbar-header"> 55 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> 56 <span class="sr-only">Toggle navigation</span> 57 <span class="icon-bar"></span> 58 <span class="icon-bar"></span> 59 <span class="icon-bar"></span> 60 </button> 61 <!-- <a class="navbar-brand" href="#">Brand</a> --> 62 </div> 63 64 <!-- Collect the nav links, forms, and other content for toggling --> 65 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 66 <ul class="nav navbar-nav"> 67 <!-- <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li> --> 68 <li><a href="/index.html">Blog</a></li> 69 <li><a href="/reading-list.html">Reading List</a></li> 70 <li><a href="/tags/post-tags.html">Archive</a></li> 71 <li><a href="/about.html">About</a></li> 72 </ul> 73 </div><!-- /.navbar-collapse --> 74 </div><!-- /.container-fluid --> 75 </nav> 76 </div> <!-- header --> 77 78 <div class="main-body"> 79 <div id="css-namespace-post"> 80 81 <div class="post-right-col"> 82 <div class="google-adsense"> 83
83<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
83 84 <!-- blog-right-col-ad --> 85 <ins class="adsbygoogle" 86 style="display:block" 87 data-ad-client="ca-pub-8182266446134074" 88 data-ad-slot="2366507542" 89 data-ad-format="auto"></ins> 90
90<script> 91 (adsbygoogle = window.adsbygoogle || []).push({}); 92 </script>
92 93 </div> 94 </div> 95 96 97 98 <div class="post-comment"> 99 <div id="post"> 100 <div id="title"> 101 <h1> 使ç¨Node.jsæå»ºä¸ä¸ªç®åçéææä»¶serverã </h1> 102 103 </div> 104 <div id="content"> 105 <p>ä»ç»ä¸ä¸å¦ä½å©ç¨Node.jsæå»ºä¸ä¸ªç®åçéææä»¶serverã 106è¿éç¨å°äº<a href="http://expressjs.com/" title="Express">Express</a>ï¼Expressæ¯Node.jsä¸ççweb frameworkã</p> 107 108<h3 id="æ°å»ºå·¥ç¨">æ°å»ºå·¥ç¨</h3> 109 110<p>å建工ç¨ç®å½ï¼</p> 111 112<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>mkdir my-app 113<span class="nv">$ </span><span class="nb">cd </span>my-app</code></pre></figure> 114 115<p>为èªå·±çå·¥ç¨å»ºä¸ä¸ª<code class="highlighter-rouge">package.json</code>æä»¶ï¼</p> 116 117<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>npm init 118This utility will walk you through creating a package.json file. 119It only covers the most common items, and tries to guess sensible defaults. 120 121See <span class="sb">`</span>npm <span class="nb">help </span>json<span class="sb">`</span> <span class="k">for </span>definitive documentation on these fields 122and exactly what they <span class="k">do</span><span class="nb">.</span> 123 124Use <span class="sb">`</span>npm install <pkg> <span class="nt">--save</span><span class="sb">`</span> afterwards to install a package and 125save it as a dependency <span class="k">in </span>the package.json file. 126 127Press ^C at any <span class="nb">time </span>to quit. 128name: <span class="o">(</span>my-app<span class="o">)</span> 129version: <span class="o">(</span>1.0.0<span class="o">)</span> 130description: 131entry point: <span class="o">(</span>index.js<span class="o">)</span> 132<span class="nb">test command</span>: 133git repository: 134keywords: 135author: 136license: <span class="o">(</span>ISC<span class="o">)</span> 137About to write to E:<span class="se">\t</span>mp<span class="se">\m</span>y-app<span class="se">\p</span>ackage.json: 138 139<span class="o">{</span> 140 <span class="s2">"name"</span>: <span class="s2">"my-app"</span>, 141 <span class="s2">"version"</span>: <span class="s2">"1.0.0"</span>, 142 <span class="s2">"description"</span>: <span class="s2">""</span>, 143 <span class="s2">"main"</span>: <span class="s2">"index.js"</span>, 144 <span class="s2">"scripts"</span>: <span class="o">{</span> 145 <span class="s2">"test"</span>: <span class="s2">"echo </span><span class="se">\"</span><span class="s2">Error: no test specified</span><span class="se">\"</span><span class="s2"> && exit 1"</span> 146 <span class="o">}</span>, 147 <span class="s2">"author"</span>: <span class="s2">""</span>, 148 <span class="s2">"license"</span>: <span class="s2">"ISC"</span> 149<span class="o">}</span> 150 151 152Is this ok? <span class="o">(</span>yes<span class="o">)</span></code></pre></figure> 153 154<p><code class="highlighter-rouge">npm init</code>ä¼é®ä½ ä¸äºé®é¢ï¼ç´æ¥å车表示æ¥åé»è®¤å¼ã<code class="highlighter-rouge">package.json</code>çæ´å¤ä¿¡æ¯è§<a href="https://docs.npmjs.com/files/package.json" title="Specifics of npm's package.json handling">æ¤ææ¡£</a>ã</p> 155 156<h3 id="å®è£ ä¾èµ">å®è£ ä¾èµ</h3> 157 158<p>å®è£ Expressï¼<code class="highlighter-rouge">--save</code>é项ä¼å¨<code class="highlighter-rouge">package.json</code>æä»¶éå ä¸å¯¹<code class="highlighter-rouge">express</code>çä¾èµã</p> 159 160<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>npm install express <span class="nt">--save</span></code></pre></figure> 161 162<h3 id="ç¼å代ç ">ç¼å代ç </h3> 163 164<p>妿卿§è¡<code class="highlighter-rouge">npm init</code>æ¶æ²¡ææå®æ°çååï¼é£ä¹ç¨åºçâmainâæä»¶å°±æ¯<code class="highlighter-rouge">index.js</code>ãç¼è¾<code class="highlighter-rouge">index.js</code>æä»¶å¦ä¸ï¼</p> 165 166<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"><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> 167<span class="kd">var</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">express</span><span class="p">();</span> 168 169<span class="nx">app</span><span class="p">.</span><span class="nx">listen</span><span class="p">(</span><span class="mi">3000</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> 170 <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'i am alive on port 3000'</span><span class="p">);</span> 171<span class="p">});
171</span> 172 173<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></code></pre></figure> 174 175<p>æéææä»¶æ¾å°<code class="highlighter-rouge">public</code>ç®å½ä¸é¢ã 176å设<code class="highlighter-rouge">public</code>ç®å½ä¸é¢æä¸ª<code class="highlighter-rouge">index.html</code>æä»¶ï¼é£ä¹å°±å¯ä»¥éè¿<code class="highlighter-rouge">http://localhost:3000/index.html</code>æ¥è®¿é®æä»¶äºã</p> 177 178<p>妿æ³ç»éææä»¶æå®URLåç¼ï¼å¯ä»¥è¿æ ·ï¼è¯¦è§<a href="http://expressjs.com/en/starter/static-files.html" title="Serving static files in Express">ææ¡£</a>ï¼ï¼</p> 179 180<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="s1">'/static'</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></code></pre></figure> 181 182<p>ç°å¨å¯ä»¥éè¿<code class="highlighter-rouge">http://localhost:3000/static/index.html</code>æ¥è®¿é®æä»¶ã</p> 183 184 185 </div> 186 <div id="pub-date"> 187 <span>2016-06-06</span> 188 <span>12:36</span> 189 </div> 190 <div class="wb-sharing"> 191 <wb:share-button appkey="2926740460" addition="simple" type="button" pic="http%3A%2F%2Frockhong.github.io%2Ffavicon.ico"> 192 </div> 193 <a class="db-sharing" href="javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e(d.location.href)+'&title='+e(d.title)+'&sel='+e(s)+'&v=1',w=450,h=330,x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width='+w+',height='+h+',left='+(screen.width-w)/2+',top='+(screen.height-h)/2))location.href=r+'&r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()"> 194 <img id="db-sharing" src="http://img2.douban.com/pics/fw2douban1.png" alt="æ¨èå°è±ç£" /> 195 </a> 196 <div class="pay-weixin"> 197 <p>å¦æä½ è§å¾è¿ç¯æç« å¯¹ä½ æç¨ï¼å¯ä»¥å¾®ä¿¡æ«ä¸æ«è¡¨ç¤ºð / If you find this post is useful to you, buy me ð¶ via Wechat</p> 198 <img src="/images/weixin.png"/> 199 </div> 200 </div> 201 202 203 <div class="google-adsense-bottom"> 204
204<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
204 205 <ins class="adsbygoogle" 206 style="display:block" 207 data-ad-client="ca-pub-8182266446134074" 208 data-ad-slot="4098132749" 209 data-ad-format="auto"></ins> 210
210<script> 211 (adsbygoogle = window.adsbygoogle || []).push({}); 212 </script>
212 213 </div> 214 215 216 217 218 219<div id="disqus_thread"></div>
220<script> 221 222/** 223 * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. 224 * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables */ 225 226var disqus_config = function () { 227 this.page.url = 'http://rockhong.github.io/a-simple-node-js-web-app.html'; // Replace PAGE_URL with your page's canonical URL variable 228 this.page.identifier = '20160606-a-simple-node-js-web-app'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable 229}; 230 231(function() { // DON'T EDIT BELOW THIS LINE 232 var d = document, s = d.createElement('script'); 233 s.src = '//hongsblog.disqus.com/embed.js'; 234 s.setAttribute('data-timestamp', +new Date()); 235 (d.head || d.body).appendChild(s); 236})(); 237</script>
237 238<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> 239 240 241 242</div> 243 244 </div> 245 246 <div class="clearfix"> </div> 247 248 <div id="footer"> 249 <p> Powered by Jekyll</p> 250 </div> <!-- footer --> 251 </div> <!-- body wrap --> 252 253 <div class="banner banner-bottom"> </div> 254 255 <!-- For Comment Count BEG--> 256
256<script id="dsq-count-scr" src="//hongsblog.disqus.com/count.js" async></script>
256 257 <!-- For Comment Count END--> 258 259
259<script src="../script/prism.js"></script>
259 260
260<script src="../script/index.js" type="text/javascript"></script>
260 261</body> 262 263</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.