全栈开发使用Node js(Express)、MYSQL进行CRUD

2024-02-2019:40:14WEB前端开发Comments2,039 views字数 5478阅读模式
全栈开发使用Node js(Express)、MYSQL进行CRUD

使用Node.js和MySQL创建基本的CRUD(创建、读取、更新、删除)应用程序是一个简单的过程,允许您使用服务器端JavaScript运行时环境与数据库交互。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

Creating an Express server

import express from 'express';

const app =express();

app.use(express.json());

app.get('/',(req,res)=>{
    res.send("Hi");
})

app.listen(5000,()=>{
   console.log("Server listening in http://localhost:5000")
})

Installing mysql2 and connecting to our Database

import express from 'express';
const app =express();

app.use(express.json());

import mysql from 'mysql2';

// connecting Database
const connection = mysql.createPool({
    host: "localhost",
    user: "root",
    password: "Password123#@!",
    database: "basic_crud",
  });


app.get('/',(req,res)=>{
    res.send("Hi");
})

app.listen(5000,()=>{
console.log("Server listening in http://localhost:5000")
})

我已经在数据库中创建了一个名为users的表。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

CREATE TABLE `users` (
 `id` int NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `address` varchar(255) DEFAULT NULL,
 `country` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
)

Creating a post request

app.post("/users", async (req, res) => {
  try {
    const { name, address, country } = req.body;
    const [{ insertId }] = await connection.promise().query(
      `INSERT INTO users (name, address, country) 
          VALUES (?, ?,?)`,
      [name, address, country]
    );
    res.status(202).json({
      message: "User Created",
    });
  } catch (err) {
    res.status(500).json({
      message: err,
    });
  }
});

当向“/users”端点发出POST请求时,将执行此代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

在路由处理函数中,代码首先从请求体中提取“name”、“address”和“country”的值。这些值应该作为POST请求的一部分以JSON格式发送。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

接下来,代码执行异步数据库查询,将用户数据插入MySQL数据库中名为“users”的表中。它使用带有占位符(“?”)的准备语句以确保安全和高效的参数化查询。“insertId”表示自动生成的新插入用户的ID,并从查询结果中获得。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

如果数据库插入成功,代码会将响应的HTTP状态码设置为202(Accepted),并将JSON响应发送回客户端,其中包含一条消息,说明用户已创建。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

但是,如果在执行路由处理程序的过程中发生错误,例如数据库连接错误或查询执行错误,则代码将使用try-catch块捕获错误。在这种情况下,它将响应的HTTP状态代码设置为500(内部服务器错误),并发送一个JSON响应,其中包含错误的“message”属性的错误消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

总之,这段代码通过从请求主体接受数据,将其插入MySQL数据库表,并根据数据库操作的成功或失败向客户端提供适当的响应来处理新用户的创建。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

Get request Get请求

app.get("/users", async(req, res) => {
    try {
        const data = await connection.promise().query(
          `SELECT *  from users;`
        );
        res.status(202).json({
          users: data[0],
        });
      } catch (err) {
        res.status(500).json({
          message: err,
        });
      }
});

当向“/users”端点发出GET请求时,将执行此代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

在路由处理函数中,代码执行异步数据库查询,从MySQL数据库中名为“users”的表中检索所有行。它使用 await 关键字暂停执行,等待查询完成后再继续。查询的结果存储在 data 变量中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

如果数据库查询成功,代码将响应的HTTP状态码设置为200(OK),并将JSON响应发送回客户端。响应对象包含一个键-值对,其中键是“users”,值是从数据库中检索到的用户数据的数组。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

但是,如果在路由处理程序的执行期间发生错误(例如,数据库连接错误或查询执行错误),则代码使用try-catch块捕获错误。在这种情况下,它会将响应的HTTP状态码设置为500(内部服务器错误),并发送一个JSON响应,其中包含一个包含错误本身的错误消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

总之,这段代码通过执行数据库查询从MySQL数据库表中选择所有行来处理所有用户的检索。如果查询成功,代码将发送一个响应,其中包含JSON格式的检索到的用户数据。如果发生任何错误,将向客户端发送相应的错误响应。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

GetById

app.get("/user/:id", async(req, res) => {
    try {
        const {id} = req.params
        const data = await connection.promise().query(
          `SELECT *  from users where id = ?`,[id]
        );
        res.status(200).json({
          user: data[0][0],
        });
      } catch (err) {
        res.status(500).json({
          message: err,
        });
      }
});

当向“/user/:id”端点发出GET请求时,其中“:id”是表示用户ID的动态参数,将执行此代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

在路由处理函数中,代码使用 req.params.id 从请求中提取“id”参数的值。这允许代码访问URL中请求的特定用户ID。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

接下来,代码执行异步数据库查询,根据提供的ID从MySQL数据库中名为“users”的表中选择用户。关键字 await 用于暂停执行并等待查询完成后再继续。ID值作为参数传递给查询,以确保参数化查询的安全和高效。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

如果数据库查询成功并返回一个匹配的用户,则代码将响应的HTTP状态码设置为200(OK),并将JSON响应发送回客户端。响应对象包含一个键-值对,其中键是“user”,值是从数据库中检索到的用户数据。从 data[0][0] 访问用户数据,因为查询结果存储在数组中,该数组的第一个元素包含用户数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

Update

app.patch("/user/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const { name, address, country } = req.body;
    const update = await connection
      .promise()
      .query(
        `UPDATE users set name = ?, address = ?, country = ? where id = ?`,
        [ name, address, country,id]
      );
    res.status(200).json({
      message: "updated",
    });
  } catch (err) {
    res.status(500).json({
      message: err,
    });
  }
});

此特定路由旨在根据用户ID更新用户信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

当向“/user/:id”端点发出PATCH请求时,其中“:id”是表示用户ID的动态参数,将执行此代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

在路由处理函数中,代码使用www.example.com从请求中提取“id”参数的值req.params.id这允许代码访问需要更新的特定用户ID。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

接下来,代码使用req.body从请求体中提取用户的“name”、“address”和“country”的更新值。这些值将以JSON格式作为PATCH请求的一部分发送。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

然后,代码执行异步数据库查询,以更新MySQL数据库中名为“users”的表中的用户信息。await关键字用于暂停执行并等待查询完成后再继续。更新后的值作为参数与用户ID一起沿着传递给查询,以确保参数化查询的安全性和有效性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

如果数据库更新操作成功,代码将响应的HTTP状态码设置为200(OK),并将JSON响应发送回客户端。响应对象包含一个键-值对,其中键是“message”,值是指示更新成功的成功消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

但是,如果在路由处理程序的执行期间发生错误(例如,数据库连接错误或查询执行错误),则代码使用try-catch块捕获错误。在这种情况下,它会将响应的HTTP状态码设置为500(内部服务器错误),并发送一个JSON响应,其中包含一个包含错误本身的错误消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

总而言之,这段代码根据用户ID处理MySQL数据库中用户信息的更新。它从请求中提取更新后的值,执行数据库查询以更新用户信息,如果更新成功,则返回成功消息。如果发生任何错误,将向客户端发送相应的错误响应。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

Delete

app.delete("/user/:id", async (req, res) => {
    try {
      const { id } = req.params;
      const update = await connection
        .promise()
        .query(
          `DELETE FROM  users where id = ?`,
          [id]
        );
      res.status(200).json({
        message: "deleted",
      });
    } catch (err) {
      res.status(500).json({
        message: err,
      });
    }
  });

此特定路由旨在根据用户ID删除用户。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

当向“/user/:id”端点发出HTTP请求时,其中“:id”是表示用户ID的动态参数,将执行此代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

在路由处理函数中,代码使用www.example.com从请求中提取“id”参数的值req.params.id这允许代码访问需要删除的特定用户ID。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

然后,代码执行异步数据库查询,从MySQL数据库中名为“users”的表中删除用户。await关键字用于暂停执行并等待查询完成后再继续。用户的ID作为参数传递给查询,以确保参数化查询的安全和高效。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

如果数据库删除操作成功,代码会将响应的HTTP状态码设置为200(OK),并将JSON响应发送回客户端。响应对象包含一个键值对,其中键是“message”,值是一条成功消息,指示用户已被删除。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

但是,如果在路由处理程序的执行期间发生错误(例如,数据库连接错误或查询执行错误),则代码使用try-catch块捕获错误。在这种情况下,它会将响应的HTTP状态码设置为500(内部服务器错误),并发送一个JSON响应,其中包含一个包含错误本身的错误消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

总而言之,这段代码根据用户ID从MySQL数据库中删除用户。它执行数据库查询以删除用户,如果删除成功,它将返回一条成功消息。如果发生任何错误,将向客户端发送相应的错误响应。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

Conclusion

总之,提供的代码片段展示了在Express框架的帮助下使用Node.js和MySQL实现基本CRUD(创建,读取,更新,删除)应用程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/60571.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/60571.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定