寫入資料
到目前為止,您已為 Tailwind Traders 產品 API 開發了讀取資料的路由。 不過,您也必須新增產品。
在此單元中,我們會討論可用來新增或更新產品的不同方法,並示範如何實作該程式碼的範例。 在下一個單元中,您將實際編輯應用程式程序碼,新增產品並更新現有的產品。
了解如何將資料寫入 API
若要寫入資料,請使用 HTTP 方法來指出資料是否為新資料或現有資料的更新。
常見的 HTTP 方法包括:
方法 | 描述 |
---|---|
POST |
建立新的資源。 |
PUT |
更新現有的資源。 |
PATCH |
更新現有資源的一部分。 |
PUT
和 PATCH
類似。 差異在於,PUT
會取代整個資源。 PATCH
只會取代要求本文中指定的屬性。
了解如何設定應用程式以接收資料
若要在 Web 應用程式中接收資料,您要根據傳入資料的格式 (例如 HTML 或 JSON 格式) 設定 Express。 不論資料格式為何,轉換和設定資料都是常見的步驟。
注意
資料會透過要求的本文進行傳送。
匯入本文剖析器。 若要將傳入資料轉換成可讀取的格式,請匯入隨 Express 安裝的
body-parser
程式庫:let bodyParser = require('body-parser');
設定資料類型。 設定 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"
}