写入数据
到目前为止,你已经开发了用于为 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);
});
若要插入新产品,请通过向 /products
发送带有 JSON 正文的 POST 请求来调用此 API。 例如:
{
"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');
}
});
若要更新产品,请通过向 /products/:id
发送带有 JSON 正文的 PUT 请求来调用此 API。 例如:
{
"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');
}
});
若要更新产品的特定部分,请通过向 /products/:id
发送带有 JSON 正文的 PATCH 请求来调用此 API。 例如:
{
"author": "J.R.R. Tolkien"
}