寫入資料

已完成

到目前為止,您已為 Tailwind Traders 產品 API 開發了讀取資料的路由。 不過,您也必須新增產品。

在此單元中,我們會討論可用來新增或更新產品的不同方法,並示範如何實作該程式碼的範例。 在下一個單元中,您將實際編輯應用程式程序碼,新增產品並更新現有的產品。

了解如何將資料寫入 API

若要寫入資料,請使用 HTTP 方法來指出資料是否為新資料或現有資料的更新。

常見的 HTTP 方法包括:

方法 描述
POST 建立新的資源。
PUT 更新現有的資源。
PATCH 更新現有資源的一部分。

PUTPATCH 類似。 差異在於,PUT 會取代整個資源。 PATCH 只會取代要求本文中指定的屬性。

了解如何設定應用程式以接收資料

若要在 Web 應用程式中接收資料,您要根據傳入資料的格式 (例如 HTML 或 JSON 格式) 設定 Express。 不論資料格式為何,轉換和設定資料都是常見的步驟。

注意

資料會透過要求的本文進行傳送。

  1. 匯入本文剖析器。 若要將傳入資料轉換成可讀取的格式,請匯入隨 Express 安裝的 body-parser 程式庫:

    let bodyParser = require('body-parser');
    
  2. 設定資料類型。 設定 Express 以將傳入的本文資料剖析成想要的格式。 下列程式碼會將資料轉換成 JSON:

    app.use(bodyParser.json({ extended: false }));
    

從客戶端傳送的資料可從 req.body 取得。 您可以讀取資料,並將其插入至資料庫中。

了解如何插入新產品

設定應用程式以接收資料之後,您就可以建立程式碼來插入資料。 以下是將新產品插入至 Tailwind Trader 應用程式資料存放區的一些程式碼範例:

// Insert a new product
app.post('/products', (req, res) => {
  const newProduct = req.body;
  newProduct.id = products.length + 1;
  products.push(newProduct);
  res.status(201).json(newProduct);
});

若要插入新產品,請呼叫此 API,向 /products 發送帶有 JSON 本文的 POST 要求。 例如:

{
  "name": "The Hobbit",
  "author": "J.R.R. Tolkien"
}

了解如何更新整個產品

除了新增新產品之外,Tailwind Traders 還需要能夠取代現有的產品資料。 以下是該程式碼處理 PUT 要求的範例:

app.put('/products/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const updatedProduct = req.body;
  const index = products.findIndex(product => product.id === id);
  if (index !== -1) {
    products[index] = updatedProduct;
    res.json(updatedProduct);
  } else {
    res.status(404).send('Product not found');
  }
});

若要更新產品,請呼叫此 API,向 /products/:id 發送帶有 JSON 本文的 PUT 要求。 例如:

{
  "id": 1,
  "name": "The Hobbit",
  "author": "J.R.R. Tolkien"
}

了解如何更新產品的一部分

您也需要功能來取代產品的部分資料,而不是全部資料。 以下是該程式碼處理 PATCH 要求的範例:

app.patch('/products/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const updates = req.body;
  const index = products.findIndex(product => product.id === id);
  if (index !== -1) {
    // overwrite existing properties with updates
    products[index] = {...products[index], ...updates};
    res.json(products[index]);
  } else {
    res.status(404).send('Product not found');
  }
});

若要更新產品的特定部分,請使用 JSON 主體,以 PATCH 要求 /products/:id 來呼叫此 API。 例如:

{
  "author": "J.R.R. Tolkien"
}