写入数据

已完成

到目前为止,你已经开发了用于为 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);
});

若要插入新产品,请通过向 /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"
}