首页 > 数据库 >node.js + mysql实现基本的增删改查功能(保姆级教程---2优化版)

node.js + mysql实现基本的增删改查功能(保姆级教程---2优化版)

时间:2024-06-05 21:11:20浏览次数:11  
标签:node const err app express 改查 js require

node.js + mysql实现基本的增删改查(保姆级教程---2优化版)

上一个实现对增删改查功能都写在同一个文件里,代码过于冗余,我认为可以优化,分开写在不同文件里面,使得更加直观。

废话不多说,直接进入主题:

  • 对之前的代码进行抽离:

  • db.js文件(用于数据库的连接,并导出连接供其他模块使用):

const mysql = require("mysql"); // 引入mysql模块

const connection = mysql.createConnection({
  host: "localhost", //主机名(默认都是localhost)
  user: "root", //用户名
  password: "123456", //密码
  database: "node_test", //数据库名
});

// 测试连接
connection.connect((err) => {
  if (err) {
    console.log("数据库连接失败,原因:", err);
  } else {
    console.log("数据库连接成功!");
  }
});
// 导出connection对象
module.exports = connection;

添加功能

add.js文件(创建express应用实例,处理添加数据的请求):
const express = require("express");
const connection = require("./db");
const app = express();

app.get("/add", (req, res) => {
  const sqlStr = "INSERT INTO users(name, email) VALUES ('金离瞳', '[email protected]')";
  connection.query(sqlStr, (err, result) => {
    if (err) {
      console.log("SQL语句添加功能执行失败,原因:", err);
      res.send("添加失败");
    } else {
      console.log("SQL语句添加功能执行成功");
      res.send("添加成功");
    }
  });
});

module.exports = app;
  • 进入项目根目录,执行命令node index.js运行项目,浏览器输入http://localhost:3001/add,添加详细成功

  • 查看数据库:

查询

find.js文件(创建express应用实例,处理查询数据请求)
const express = require("express");
const connection = require("./db");
const app = express();

app.get("/find", (req, res) => {
  const sqlStr = "select * from users";
  connection.query(sqlStr, (err, result) => {
    if (err) {
      console.log("SQL语句查询功能执行失败,原因:", err);
      res.status(500).send("查询失败");
    } else {
      console.log("SQL语句查询功能执行成功");
      res.status(200).json({ message: "查询成功", data: result });
    }
  });
});

module.exports = app;
  • 进入项目根目录,执行命令node index.js运行项目,浏览器输入http://localhost:3001/find,显示出查询的信息

修改功能

update.js文件(创建express应用实例,处理更新数据的请求)
const express = require("express");
const connection = require("./db");
const app = express();

app.get("/update/:id", (req, res) => {
    const userId = req.params.id;
    console.log("收到PUT请求的用户ID为:", userId);

    const newName = "陆瑾年"; // 修改之后的名字
    const newEmail = "[email protected]";

    //   // 定义一个查询函数
    const sqlStr = "update users set name = ?, email = ? where id = ?";
    connection.query(sqlStr, [newName, newEmail, userId], (err, result) => {
      if (err) {
        console.error("sql语句修改功能失败,原因:", err);
        return res.status(500).send("修改失败");
      }
      console.log("sql语句修改功能成功");
      return res.status(200).send("修改成功");
    });
  });


module.exports = app;
  • 进入项目根目录,执行命令node index.js运行项目,浏览器输入http://localhost:3001/update/4,显示“修改成功”,然后查看mysql数据库

删除功能

delete.js文件(创建express应用实例,除了删除数据的请求)
const express = require("express");
const connection = require("./db");
const app = express();

app.get("/delete/:id", (req, res) => {
    const userId = req.params.id;
    console.log("收到delete请求的用户ID为:", userId);

    //   // 定义一个查询函数
    const sqlStr = "delete from users where id = ?";
    connection.query(sqlStr, [userId], (err, result) => {
      if (err) {
        console.error("sql语句删除功能失败,原因:", err);
        return res.status(500).send("修改失败");
      }
      console.log("sql语句删除功能成功");
      return res.status(200).send("删除成功");
    });
  });

  module.exports = app;
  • 进入项目根目录,执行命令node index.js运行项目,浏览器输入http://localhost:3001/delete/2,显示“删除成功”,然后查看mysql数据库
index.js文件(整个应用的入口文件,负责启动所有的express实例对象。通过引入其他模块,将它们注册到主应用实例中,从而形成完整的服务)
const express = require("express");
const app = express();
const addApp = require("./add");
const findApp = require("./find");
const updateApp = require("./update");
const deleteApp = require("./delete");

app.use(addApp);
app.use(findApp);
app.use(updateApp);
app.use(deleteApp);

app.listen(3001, () => {
  console.log("服务在3001端口已开启...");
});

通过这种方式,可以将代码拆分到多个模块中,使得每个模块都有清晰的职责,也更容易进行维护与测试。但是同时也增加了文件的数量,使得模块间通信较为复杂。

总结:

对于大型项目和开发团队来说,将代码拆分为多个模块文件通常更好。这样可以使代码更易于管理、维护和拓展,同时提高了代码可读性与可维护性。毕竟将所有代码放在同一个文件中可能会导致文件过于庞大,难以理解和维护,不利于团队复用。但是呢,一些小型项目或者简单的脚本中,将所有代码放在同一个文件中也许会更方便,因为能降低一些模块化带来的复杂性,也能更快捷地开始编写简单的程序。因此,最后选择哪种方式还要取决于团队具体的情况。

结尾:

那么你觉得这个小的增删改查项目更适用于哪个方法呢?

标签:node,const,err,app,express,改查,js,require
From: https://www.cnblogs.com/sharenotes/p/18233809

相关文章

  • Android JSBridge 详解(背景和原理、特性和挑战、应用场景和实现方法)
    AndroidJSBridge详解(背景和原理、特性和挑战、应用场景和实现方法)JSBridge(JavaScriptBridge)是一种用于在JavaScript和Native代码之间进行通信的技术,常用于在Web应用中调用Native功能或在Native应用中嵌入Web页面。在Android平台上,JSBridge可以实现通过......
  • js 中 (function($){...})(jQuery) 含义
    原文链接:https://www.cnblogs.com/Jeely/p/10715089.htmljs中(function($){...})(jQuery)含义js中定义函数常用写法是functionname(arg){//arg则是匿名函数的参数。//...}调用函数时的写法是:name(arg);======================================================......
  • js有效括号匹配
    //定义一个括号映射constbracketMap=[{left:'[',right:']'},{left:'<',right:'>'},{left:'(',right:')'},......
  • 【JS】JavaScript编程语言-谷歌浏览器调试之前端代码(2024-06-05)
    1、在浏览器中调试调试是指在一个脚本中找出并修复错误的过程。所有的现代浏览器和大多数其他环境都支持调试工具——开发者工具中的一个令调试更加容易的特殊用户界面。它也可以让我们一步步地跟踪代码以查看当前实际运行情况。在这里我们将会使用Chrome(谷歌浏览器)。2......
  • js的 addEventListener如果添加的是相同名称的事件,会被覆盖吗
    在JavaScript中,使用addEventListener方法向元素添加事件监听器时,如果有多个相同的事件名称(比如多次调用addEventListener("click",function)),这些监听器不会互相覆盖,而是会累加。这意味着所有为同一事件类型注册的监听器都会按照添加的顺序依次触发,而不是只有最后一个生效。这......
  • js一般私有的方法如何命名
    在JavaScript中,对于私有方法的命名,尽管语言本身并不强制任何命名规范,但有一些广泛接受的约定来表明方法或属性的私有性。这些约定主要是为了提高代码的可读性和维护性,让其他开发者能够快速识别出哪些方法或属性是设计为内部使用的。以下是几种常见的私有方法命名约定:下划线前......
  • yarn 命令如何查看node_modules中的某个依赖包是被package.json中的哪个包所使用的?
    Yarn本身并没有直接提供一个命令来查看node_modules中的某个依赖包是由package.json中的哪个包直接或间接引入的。但是,你可以通过一些间接的方式来获取这些信息:手动检查:打开node_modules中你想查询的依赖包的package.json文件,查看它的name字段确认包名。然后回到你的项目根......
  • 【vuejs】keep-alive组件的原理讲解和使用讲解
    1.keep-alive简介Vue.js框架中的<keep-alive>组件是一个用于缓存组件实例的内置组件,它使得组件在不活动时保持其状态,从而提高应用的性能和用户体验。当使用动态组件<component>切换视图时,不在显示的组件实例会被销毁并重新创建,这会导致状态丢失。而<keep-alive>可......
  • js table sort
    备份,后面做个整理letzoneOverviewData=[]letsortFields=[]constgetSortedRows=()=>{letrows=[...zoneOverviewData];constascFields=sortFields.filter((z)=>z.sort==="asc").sort((a,b)=>(a.sortIndex>b.sor......
  • SpringBoot+微信支付-JSAPI{微信支付回调}
    引入微信支付SDKMaven:com.github.wechatpay-apiv3:wechatpay-java-core:0.2.12Maven:com.github.wechatpay-apiv3:wechatpay-java:0.2.12响应微信回调的封装@Getter@Setter@NoArgsConstructor@AllArgsConstructor@Accessors(chain=true)publicclassWxNotifyVo{......