小乐肖 發表於 2019-7-22 02:19:00

Node.js 从零开发 web server博客项目[数据存储]

<svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                  </svg>
                                          <p><strong>web server博客项目</strong></p>
<ol>
<li>Node.js 从零开发 web server博客项目[项目介绍]</li>
<li>Node.js 从零开发 web server博客项目[接口]</li>
<li>Node.js 从零开发 web server博客项目[数据存储]</li>
<li>Node.js 从零开发 web server博客项目[登录]</li>
<li>Node.js 从零开发 web server博客项目[日志]</li>
<li>Node.js 从零开发 web server博客项目[安全]</li>
<li>Node.js 从零开发 web server博客项目</li>
<li>Node.js 从零开发 web server博客项目</li>
<li>Node.js 从零开发 web server博客项目[上线与配置]</li>
</ol>
<p></p><div class="toc"><h3>文章目录</h3><ul><ul><li>nodejs链接 mysql 封装成工具</li><ul><li>安装`MySQL`</li><li>创建`src/conf/db.js`</li></ul><li>API对接MySQL (博客列表)</li><ul><li>controller/blog.js</li><li>router/blog.js</li><li>app.js</li></ul><li>API对接MySQL (博客详情和新建)</li><ul><li>controller/blog.js</li><li>router/blog.js</li></ul><li>API对接MySQL (更新和删除)</li><ul><li>更新</li><li>删除</li></ul><li>API对接MySQL (登录)</li><ul><li>controller/user.js</li><li>router/user.js</li><li>app.js</li></ul></ul></ul></div><p></p>
<h2>nodejs链接 mysql 封装成工具</h2>
<ul>
<li>
<h3>安装<code>MySQL</code></h3>
</li>
</ul>
<p><code>cnpm i mysql -S</code></p>
<ul>
<li>
<h3>创建<code>src/conf/db.js</code></h3>
</li>
</ul>
<pre><code class="prism language-js"><span class="token keyword">const</span> env <span class="token operator">=</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">NODE_ENV</span> <span class="token comment">// 环境参数</span>

<span class="token comment">// 配置</span>
<span class="token keyword">let</span> <span class="token constant">MYSQL_CONF</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>env <span class="token operator">===</span> <span class="token string">'dev'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token constant">MYSQL_CONF</span> <span class="token operator">=</span> <span class="token punctuation">{</span>
    host<span class="token punctuation">:</span> <span class="token string">'localhost'</span><span class="token punctuation">,</span>
    user<span class="token punctuation">:</span> <span class="token string">'root'</span><span class="token punctuation">,</span>
    password<span class="token punctuation">:</span> <span class="token string">'root'</span><span class="token punctuation">,</span>
    port<span class="token punctuation">:</span> <span class="token string">'3306'</span><span class="token punctuation">,</span>
    database<span class="token punctuation">:</span> <span class="token string">'myblog'</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>env <span class="token operator">===</span> <span class="token string">'production'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token constant">MYSQL_CONF</span> <span class="token operator">=</span> <span class="token punctuation">{</span>
    host<span class="token punctuation">:</span> <span class="token string">'localhost'</span><span class="token punctuation">,</span>
    user<span class="token punctuation">:</span> <span class="token string">'root'</span><span class="token punctuation">,</span>
    password<span class="token punctuation">:</span> <span class="token string">'root'</span><span class="token punctuation">,</span>
    port<span class="token punctuation">:</span> <span class="token string">'3306'</span><span class="token punctuation">,</span>
    database<span class="token punctuation">:</span> <span class="token string">'myblog'</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token constant">MYSQL_CONF</span> <span class="token punctuation">}</span>
</code></pre>
<ul>
<li>创建<code>scr/db/mysql.js</code></li>
</ul>
<pre><code class="prism language-js"><span class="token keyword">const</span> mysql <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'mysql'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token constant">MYSQL_CONF</span> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../conf/db'</span><span class="token punctuation">)</span>

<span class="token comment">// 创建链接对象</span>
<span class="token keyword">var</span> con <span class="token operator">=</span> mysql<span class="token punctuation">.</span><span class="token function">createConnection</span><span class="token punctuation">(</span><span class="token constant">MYSQL_CONF</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// 开始链接</span>
con<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// 统一执行 sql 的函数</span>
<span class="token keyword">function</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">const</span> promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span>resolve<span class="token punctuation">,</span> reject<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    con<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>error<span class="token punctuation">,</span> result<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">reject</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span>
      <span class="token keyword">return</span>
      <span class="token punctuation">}</span>
      <span class="token function">resolve</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> promise
<span class="token punctuation">}</span>

module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
exec
<span class="token punctuation">}</span>
</code></pre>
<h2>API对接MySQL (博客列表)</h2>
<h3>controller/blog.js</h3>
<pre><code class="prism language-js"><span class="token comment">// 博客列表</span>
<span class="token keyword">const</span> <span class="token function-variable function">getList</span> <span class="token operator">=</span> <span class="token punctuation">(</span>author<span class="token punctuation">,</span> keyword<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token keyword">let</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`select * from blogs where 1=1 `</span></span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>author<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    sql <span class="token operator">+=</span> <span class="token template-string"><span class="token string">`and author='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>author<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">' `</span></span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>keyword<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    sql <span class="token operator">+=</span> <span class="token template-string"><span class="token string">`and title like '%</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>keyword<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">%' `</span></span>
<span class="token punctuation">}</span>
sql <span class="token operator">+=</span> <span class="token template-string"><span class="token string">`order by createtime desc;`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span>
<span class="token comment">// [{</span>
<span class="token comment">//   id: 1,</span>
<span class="token comment">//   title: '标题a',</span>
<span class="token comment">//   content: '内容a',</span>
<span class="token comment">//   createTime: 1562085127324,</span>
<span class="token comment">//   suthor: 'zhangsan'</span>
<span class="token comment">// }]</span>
<span class="token punctuation">}</span>
</code></pre>
<h3>router/blog.js</h3>
<pre><code class="prism language-js"><span class="token comment">// 获取博客列表</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'GET'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/blog/list'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> <span class="token punctuation">{</span>
      author<span class="token punctuation">,</span>
      keyword
    <span class="token punctuation">}</span> <span class="token operator">=</span> req<span class="token punctuation">.</span>query <span class="token operator">||</span> <span class="token string">''</span>
    <span class="token comment">// const listData = getList(author, keyword)</span>
    <span class="token comment">// return new SuccessModel(listData)</span>
    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">getList</span><span class="token punctuation">(</span>author<span class="token punctuation">,</span> keyword<span class="token punctuation">)</span>
    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>listData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span>listData<span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<h3>app.js</h3>
<pre><code class="prism language-js"><span class="token function">getPostData</span><span class="token punctuation">(</span>req<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>postData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
req<span class="token punctuation">.</span>body <span class="token operator">=</span> postData

<span class="token comment">// 处理 blog 路由</span>
<span class="token comment">// const blogData = handleBlogRouter(req, res)</span>
<span class="token comment">// if (blogData) {</span>
<span class="token comment">//   res.end(</span>
<span class="token comment">//   JSON.stringify(blogData)</span>
<span class="token comment">//   )</span>
<span class="token comment">//   return</span>
<span class="token comment">// }</span>
<span class="token keyword">const</span> blogResult <span class="token operator">=</span> <span class="token function">handleBlogRouter</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>blogResult<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    blogResult<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>blogData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      res<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span>
      <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>blogData<span class="token punctuation">)</span>
      <span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
    <span class="token keyword">return</span>
<span class="token punctuation">}</span>
<span class="token operator">...</span>
<span class="token comment">// 未命中路由, 返回404</span>
res<span class="token punctuation">.</span><span class="token function">writeHead</span><span class="token punctuation">(</span><span class="token number">404</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    <span class="token string">"content-type"</span><span class="token punctuation">:</span> <span class="token string">"text/plain"</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
res<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">"404 Not Found\n"</span><span class="token punctuation">)</span>
res<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/20190707012843130.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM2MTQw,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
<h2>API对接MySQL (博客详情和新建)</h2>
<h3>controller/blog.js</h3>
<pre><code class="prism language-js"><span class="token keyword">const</span> <span class="token punctuation">{</span> exec <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../db/mysql'</span><span class="token punctuation">)</span>

<span class="token comment">// 博客内容</span>
<span class="token keyword">const</span> <span class="token function-variable function">getDtail</span> <span class="token operator">=</span> <span class="token punctuation">(</span>id<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// return {</span>
<span class="token comment">//   id: 1,</span>
<span class="token comment">//   title: '标题a',</span>
<span class="token comment">//   content: '内容a',</span>
<span class="token comment">//   createTime: 1562085127324,</span>
<span class="token comment">//   suthor: 'zhangsan'</span>
<span class="token comment">// }</span>

<span class="token keyword">let</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`select * from blogs where id='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">'`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>rows <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">return</span> rows<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token comment">// 新增一篇博客</span>
<span class="token keyword">const</span> <span class="token function-variable function">newBlog</span> <span class="token operator">=</span> <span class="token punctuation">(</span>blogData<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// 赋予id</span>
<span class="token comment">// return {</span>
<span class="token comment">//   id: 3</span>
<span class="token comment">// }</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span>title<span class="token punctuation">,</span> content<span class="token punctuation">,</span> author<span class="token punctuation">}</span> <span class="token operator">=</span> blogData
<span class="token keyword">const</span> createtime <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token keyword">let</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`insert into blogs (title, content, createtime, author) values ('</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>title<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">', '</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>content<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">', '</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>createtime<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">', '</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>author<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">');`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<h3>router/blog.js</h3>
<pre><code class="prism language-js"><span class="token comment">// 获取一篇博客的内容</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'GET'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/blog/detail'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">// const data = getDtail(id)</span>
    <span class="token comment">// return new SuccessModel(data)</span>

    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">getDtail</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span>
    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>data <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token comment">// 新增一篇博客</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'POST'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/blog/new'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">// const data = newBlog(req.body)</span>
    <span class="token comment">// return new SuccessModel(data)</span>
   
    req<span class="token punctuation">.</span>body<span class="token punctuation">.</span>author <span class="token operator">=</span> <span class="token string">'zhangsan'</span> <span class="token comment">// 假数据, 待开发登陆时再改成真实数据</span>
   
    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">newBlog</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>body<span class="token punctuation">)</span>
    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>data <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/20190707014815578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM2MTQw,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>
<img src="https://img-blog.csdnimg.cn/20190707021341620.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM2MTQw,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
<h2>API对接MySQL (更新和删除)</h2>
<h3>更新</h3>
<pre><code class="prism language-js"><span class="token comment">// 更新一篇博客</span>
<span class="token keyword">const</span> <span class="token function-variable function">updateBlog</span> <span class="token operator">=</span> <span class="token punctuation">(</span>id<span class="token punctuation">,</span> blogData <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// console.log(`更新一篇博客, ID:${id}, 内容:${blogData}`)</span>
<span class="token comment">// return true</span>

<span class="token keyword">const</span> <span class="token punctuation">{</span>title<span class="token punctuation">,</span> content<span class="token punctuation">}</span> <span class="token operator">=</span> blogData

<span class="token keyword">const</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`update blogs set title='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>title<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">', content='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>content<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">' where id=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>updateData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'updateData is '</span><span class="token punctuation">,</span> updateData<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>updateData<span class="token punctuation">.</span>affectedRows <span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token boolean">true</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> <span class="token boolean">false</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">*</span>
<span class="token comment">// 更新一篇博客</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'POST'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/blog/update'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">updateBlog</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> req<span class="token punctuation">.</span>body<span class="token punctuation">)</span>
    <span class="token comment">// if (result) {</span>
    <span class="token comment">//   return new SuccessModel(data)</span>
    <span class="token comment">// } else {</span>
    <span class="token comment">//   return ErrorModel('更新博客失败')</span>
    <span class="token comment">// }</span>

    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>val <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token function">ErrorModel</span><span class="token punctuation">(</span><span class="token string">'更新博客失败'</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/20190707022443898.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM2MTQw,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
<h3>删除</h3>
<pre><code class="prism language-js"><span class="token comment">// 删除一篇博客</span>
<span class="token keyword">const</span> <span class="token function-variable function">delBlog</span> <span class="token operator">=</span> <span class="token punctuation">(</span>id<span class="token punctuation">,</span> author<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// console.log(`删除一篇博客, ID:${id}`)</span>
<span class="token comment">// return true</span>

<span class="token keyword">const</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`delete from blogs where id='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">' and author='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>author<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">'`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>delData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>delData<span class="token punctuation">.</span>affectedRows <span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token boolean">true</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> <span class="token boolean">false</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

<span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">**</span><span class="token operator">*</span>
<span class="token comment">// 删除一篇博客</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'POST'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/blog/del'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">// const result = delBlog(id)</span>
    <span class="token comment">// if (result) {</span>
    <span class="token comment">//   return new SuccessModel(result)</span>
    <span class="token comment">// } else {</span>
    <span class="token comment">//   return new ErrorModel('删除博客失败')</span>
    <span class="token comment">// }</span>

    <span class="token keyword">const</span> author <span class="token operator">=</span> <span class="token string">'zhangsan'</span>
    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">delBlog</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> author<span class="token punctuation">)</span>
    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>val <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>val<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ErrorModel</span><span class="token punctuation">(</span><span class="token string">'删除博客失败'</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<h2>API对接MySQL (登录)</h2>
<h3>controller/user.js</h3>
<pre><code class="prism language-js"><span class="token keyword">const</span> <span class="token punctuation">{</span> exec <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../db/mysql'</span><span class="token punctuation">)</span>

<span class="token keyword">const</span> <span class="token function-variable function">loginCheck</span> <span class="token operator">=</span> <span class="token punctuation">(</span>username<span class="token punctuation">,</span> password<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// if (username === 'zhangsan' &amp;&amp; password === '1234') {</span>
<span class="token comment">//   return true</span>
<span class="token comment">// }</span>
<span class="token keyword">const</span> sql <span class="token operator">=</span> <span class="token template-string"><span class="token string">`select username, realname from users where username='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>username<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">' and password='</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>password<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">'`</span></span>
<span class="token keyword">return</span> <span class="token function">exec</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>rows <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">return</span> rows<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
loginCheck
<span class="token punctuation">}</span>
</code></pre>
<h3>router/user.js</h3>
<pre><code class="prism language-js"><span class="token keyword">const</span> <span class="token punctuation">{</span>
loginCheck
<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../controller/user'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> SuccessModel<span class="token punctuation">,</span> ErrorModel <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../model/resModel'</span><span class="token punctuation">)</span>

<span class="token keyword">const</span> <span class="token function-variable function">handleUserRouter</span> <span class="token operator">=</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span>
    method<span class="token punctuation">,</span>
    path
<span class="token punctuation">}</span> <span class="token operator">=</span> req

<span class="token comment">// 登录</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>method <span class="token operator">===</span> <span class="token string">'POST'</span> <span class="token operator">&amp;&amp;</span> path <span class="token operator">===</span> <span class="token string">'/api/user/login'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> <span class="token punctuation">{</span>
      username<span class="token punctuation">,</span>
      password
    <span class="token punctuation">}</span> <span class="token operator">=</span> req<span class="token punctuation">.</span>body
    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">loginCheck</span><span class="token punctuation">(</span>username<span class="token punctuation">,</span> password<span class="token punctuation">)</span>

    <span class="token comment">// if (result) {</span>
    <span class="token comment">//   return new SuccessModel(result)</span>
    <span class="token comment">// } else {</span>
    <span class="token comment">//   return new ErrorModel('登录失败')</span>
    <span class="token comment">// }</span>

    <span class="token keyword">return</span> result<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>data <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">.</span>username<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SuccessModel</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ErrorModel</span><span class="token punctuation">(</span><span class="token string">'登录失败'</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

module<span class="token punctuation">.</span>exports <span class="token operator">=</span> handleUserRouter
</code></pre>
<h3>app.js</h3>
<pre><code class="prism language-js"><span class="token comment">// 处理 user 路由</span>
    <span class="token comment">// const userData = handleUserRouter(req, res)</span>
    <span class="token comment">// if (userData) {</span>
    <span class="token comment">//   res.end(</span>
    <span class="token comment">//   JSON.stringify(userData)</span>
    <span class="token comment">//   )</span>
    <span class="token comment">//   return</span>
    <span class="token comment">// }</span>

    <span class="token keyword">const</span> userResult <span class="token operator">=</span> <span class="token function">handleUserRouter</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>userResult<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      userResult<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>userData <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      res<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span>
          <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>userData<span class="token punctuation">)</span>
      <span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token keyword">return</span>
    <span class="token punctuation">}</span>
    <span class="token template-string"><span class="token string">``</span></span>`
</code></pre><br><br>
来源:https://www.cnblogs.com/izhaong/p/12154264.html
頁: [1]
查看完整版本: Node.js 从零开发 web server博客项目[数据存储]