<figure class="highlight js"><table><tr><td class="code"><pre><div class="line"><span class="comment">// server.js</span></div><div class="line"><span class="meta">'use strict'</span></div><div class="line"></div><div class="line"><span class="keyword">var</span> fs = <span class="built_in">require</span>(<span class="string">'fs'</span>)</div><div class="line"><span class="keyword">var</span> path = <span class="built_in">require</span>(<span class="string">'path'</span>)</div><div class="line"></div><div class="line"><span class="comment">// Define global Vue for server-side app.js</span></div><div class="line">global.Vue = <span class="built_in">require</span>(<span class="string">'vue'</span>)</div><div class="line"></div><div class="line"><span class="comment">// Get the HTML layout</span></div><div class="line"><span class="keyword">var</span> layout = fs.readFileSync(<span class="string">'./index.html'</span>, <span class="string">'utf8'</span>)</div><div class="line"></div><div class="line"><span class="comment">// Create a renderer</span></div><div class="line"><span class="keyword">var</span> renderer = <span class="built_in">require</span>(<span class="string">'vue-server-renderer'</span>).createRenderer()</div><div class="line"></div><div class="line"><span class="comment">// Create an express server</span></div><div class="line"><span class="keyword">var</span> express = <span class="built_in">require</span>(<span class="string">'express'</span>)</div><div class="line"><span class="keyword">var</span> server = express()</div><div class="line"></div><div class="line"><span class="comment">// Serve files from the assets directory</span></div><div class="line">server.use(<span class="string">'/assets'</span>, express.static(</div><div class="line"> path.resolve(__dirname, <span class="string">'assets'</span>)</div><div class="line">))</div><div class="line"></div><div class="line"><span class="comment">// Handle all GET requests</span></div><div class="line">server.get(<span class="string">'*'</span>, <span class="function"><span class="keyword">function</span> (<span class="params">request, response</span>) </span>{</div><div class="line"> <span class="comment">// Render our Vue app to a string</span></div><div class="line"> renderer.renderToString(</div><div class="line"> <span class="comment">// Create an app instance</span></div><div class="line"> <span class="built_in">require</span>(<span class="string">'./assets/app'</span>)(),</div><div class="line"> <span class="comment">// Handle the rendered result</span></div><div class="line"> <span class="function"><span class="keyword">function</span> (<span class="params">error, html</span>) </span>{</div><div class="line"> <span class="comment">// If an error occurred while rendering...</span></div><div class="line"> <span class="keyword">if</span> (error) {</div><div class="line"> <span class="comment">// Log the error in the console</span></div><div class="line"> <span class="built_in">console</span>.error(error)</div><div class="line"> <span class="comment">// Tell the client something went wrong</span></div><div class="line"> <span class="keyword">return</span> response</div><div class="line"> .status(<span class="number">500</span>)</div><div class="line"> .send(<span class="string">'Server Error'</span>)</div><div class="line"> }</div><div class="line"> <span class="comment">// Send the layout with the rendered app's HTML</span></div><div class="line"> response.send(layout.replace(<span class="string">'<div id="app"></div>'</span>, html))</div><div class="line"> }</div><div class="line"> )</div><div class="line">})</div><div class="line"></div><div class="line"><span class="comment">// Listen on port 5000</span></div><div class="line">server.listen(<span class="number">5000</span>, <span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</div><div class="line"> <span class="keyword">if</span> (error) <span class="keyword">throw</span> error</div><div class="line"> <span class="built_in">console</span>.log(<span class="string">'Server is running at localhost:5000'</span>)</div><div class="line">})</div></pre></td></tr></table></figure>
0 commit comments