iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

昨天修改了呈現的畫面之後,
今天要修改後面處理資料的邏輯啦
讓我們繼續看下去~/images/emoticon/emoticon08.gif


調整新增書籍的程式

  • 新增 POST /book

    • 在先前已經學到使用 express-validator 套件,

      接下來我們將以取得的 bookName 寫到資料庫。

    • 與先前練習比較不一樣的是,也要寫入該登入者的 Id。

    // routes/modules/bookBySequelize.js
    
    router.post('/', /* 1. 驗證傳入的資訊是否正確*/, async (req, res) => {
    
    // 2.把我們存在 session 的 id 寫入資料庫
    const books = await book.create({ bookName: bookName, memberId: req.session.userId }, { raw: true })
    
    // 3. 返回首頁
    res.redirect('/')
    })
    

調整刪除書籍的程式

  • 刪除 DELETE /book

    • 昨天有提到 Form 本身只有支援 GET / POST 的請求方式,

      大家有試過昨天的方法會變成怎麼樣嗎?

      1. 先新增一個 bookTest 的資料。

        https://ithelp.ithome.com.tw/upload/images/20230920/20162304knq9MpSqEo.png

      2. 點選 Delete Book。

      3. 直接出現在上方 URI 上。

        https://ithelp.ithome.com.tw/upload/images/20230920/20162304YBqNnEZbw6.png

    • 所以可以知道並不支援 DELETE 的方法,並且預設為 GET。

    • 所以我們需要改寫一下我們的 Form 表單。

      1. 將 method 改為 post
      2. action 改為 action="/book?_method=DELETE"
      <!-- public/views/index.ejs -->
      
      <!-- 刪除書籍的表單 -->
            <form action="/book?_method=DELETE" method="post">
              <label for="bookToDelete">Delete Book's Id:</label>
              <select id="bookToDelete" name="id">
                <% if (books && books.length > 0) { %>
                  <% books.forEach(function(book) { %>
                    <option value="<%= book.id %>"><%= book.id %></option>
                  <% }); %>
                <% } %>
              </select>
              <button type="submit">Delete Book</button>
            </form>
      
      1. 下載 method-override 的套件。

        1. 在終端機打 npm install method-override 完成套件的下載。
        2. app.js 引入該套件並加載 middleware。
        // app.js
        
        const methodOverride = require('method-override')
        
        app.use(methodOverride('_method'))
        
      2. 所以就會依照我們在 _method 寫的 action="/book?_method=DELETE" 方法,將原有的方法做轉換,變成 DELETE

  • 現在再調整刪除的程式啦~!

    // routes/modules/bookBySequelize.js
    
    router.delete('/', async (req, res) => {
    
    const id = req.body.id
    
    const books = await book.destroy({
          where: {
            id : id
          }
      })
      res.redirect('/')
    
    })
    

以上就是我們的書單列表小專案,

希望可以幫助大家更認識 express ~!


上一篇
Day 23 - 實例專案:構建一個簡單的書單列表(上)
下一篇
Day 25 - 優化專案:MVC 與 三層式架構
系列文
30 天架設 Node.js - Express 框架:快速學習之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言