NodeJS + Express 第 4 部分:CRUD API

2025-05-28

NodeJS + Express 第 4 部分:CRUD API

这里有一系列文章可以帮助您使用 NodeJS + Express 创建后端应用程序。

本系列是我 NodeJS 基础系列的延续。如果你对 NodeJS 还不了解,可以先阅读以下系列:NodeJS 入门

Node.js 如今已成为必需品,因此开发人员必须掌握它。

因此,我将每两天发布一篇新文章,逐渐地您将了解有关 Node.js + Espress 的所有知识

为了不错过任何内容,请在 Twitter 上关注我:https://twitter.com/EricTheCoder_


CRUD API

现在我们已经了解了基本概念,是时候构建真正的 CRUD API(创建、读取、更新、删除)了

我们将构建所​​有这些 CRUD 路线:

创建:POST /api/products

读取全部:GET /api/products

读取:GET /api/product/1

更新:PUT /api/products/1

删除:DELETE /api/products/1

退货状态

使用 CRUD API,您可以返回数据,也可以返回状态代码。

以下是一些状态代码及其含义的列表

res.status(200) // Ok
res.status(201) // Created
res.status(204) // No content
res.status(400) // Bad request
res.status(401) // Unauthorized
res.status(403) // Forbidden
res.status(404) // Not found
res.status(500) // Server error
Enter fullscreen mode Exit fullscreen mode

创建文件名 data.js 并复制/粘贴此代码

const products = [
    { id: 1, name: 'iPhone', price: 800 },
    { id: 2, name: 'iPad', price: 650 },
    { id: 3, name: 'iWatch', price: 750 }
]

module.exports = products
Enter fullscreen mode Exit fullscreen mode

加载数据并启动服务器

const express = require('express')
const app = express()
const products = require('./data.js')

app.listen(5000, () => {
    console.log('server is listening on port 5000')
})
Enter fullscreen mode Exit fullscreen mode

创建:POST /api/products

app.use(express.json()) // parse json body content

app.post('/api/products', (req, res) => {
    const newProduct = {
        id: products.length + 1,
        name: req.body.name,
        price: req.body.price
    }
    products.push(newProduct)
    res.status(201).json(newProduct)
})
Enter fullscreen mode Exit fullscreen mode

app.use(express.json) 是一个中间件,它接受 JSON 内容并创建相关的 req.body 属性。(例如 req.body.name 和 req.body.price)

res.status(201).json(newProduct) 将返回响应状态设置为 201(已创建),并以 JSON 格式返回 newProduct 数据。

读取全部:GET /api/products

app.get('/api/products', (req, res) => {
    res.json(products)
})
Enter fullscreen mode Exit fullscreen mode

读取:GET /api/product/1

app.get('/api/products/:productID', (req, res) => {
    const id = Number(req.params.productID)
    const product = products.find(product => product.id === id)

    if (!product) {
        return res.status(404).send('Product not found')
    }
    res.json(product)
})
Enter fullscreen mode Exit fullscreen mode

如第 2 部分所示,首先我们从路由参数中检索 productID。

然后我们检查该产品是否存在并相应地发送响应。

res.json(product) 以 JSON 格式发送产品,并附带 200 ok 状态代码。

更新:PUT /api/products/1

app.use(express.json()) // parse json body content

app.put('/api/products/:productID', (req, res) => {
    const id = Number(req.params.productID)
    const index = products.findIndex(product => product.id === id)
    if (index === -1) {
        return res.status(404).send('Product not found')
    }
    const updatedProduct = {
        id: products[index].id,
        name: req.body.name,
        price: req.body.price
    }
    products[index] = updatedProduct
    res.status(200).json('Product updated')
})
Enter fullscreen mode Exit fullscreen mode

删除:DELETE /api/products/1

app.use(express.json()) // parse json body content

app.delete('/api/products/:productID', (req, res) => {
    const id = Number(req.params.productID)
    const index = products.findIndex(product => product.id === id)
        if (index === -1) {
        return res.status(404).send('Product not found')
    }
    products.splice(index,1)
    res.status(200).json('Product deleted')
})
Enter fullscreen mode Exit fullscreen mode

结论

今天就到这里,请在推特上关注我:https://twitter.com/EricTheCoder_以便收到下一篇文章发布的通知(两天内)。

文章来源:https://dev.to/ericchapman/nodejs-express-part-4-crud-api-37ef
PREV
React 备忘单(2021 年 6 月更新)
NEXT
NextJS 性能检查表