0

0

Nodejs如何操作数据库(增删改查)?

青灯夜游

青灯夜游

发布时间:2021-03-18 10:00:14

|

3594人浏览过

|

来源于csdn

转载

本篇文章和大家通过代码示例看看node操作数据库进行增删改查的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Nodejs如何操作数据库(增删改查)?

相关推荐:《nodejs 教程

nodejs操作数据库-增

// 导包
const express = require("express");
var mysql = require("mysql");

// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});

// 打开连接
connection.connect();

let name = "伟健";
let miaoshu = "哈哈哈很开心";
// 执行sql语句
connection.query(
  `insert into user(username,description) values("${name}","${miaoshu}")`,
  function (error, results) {
    if (error == null) {
      console.log(results); // 返回结果是一个对象
      console.log(results.affectedRows); // 受影响的行数,如果大于0,说明新增成功
      console.log(results.insertId); // 插入的这条数据的id
    }
  }
);

// 关闭连接
connection.end();

nodejs操作数据库-删

// 导包
const express = require("express");
var mysql = require("mysql");

// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});

// 打开连接
connection.connect();

let id = 3;
let name = "千里jack";
let miaoshu = "新一代世界首富";
// 执行sql语句
connection.query(`delete from user where id = ${id}`, function (
  error,
  results
) {
  if (error == null) {
    console.log(results); // 返回结果是一个对象
    console.log(results.affectedRows); // 受影响的行数,如果大于0,说明新增成功
  }
});

// 关闭连接
connection.end();

nodejs操作数据库-改

// 导包
const express = require("express");
var mysql = require("mysql");

// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});

// 打开连接
connection.connect();

let id = 3;
let name = "千里jack";
let miaoshu = "新一代世界首富";
// 执行sql语句
connection.query(
  `update user set username="${name}",description="${miaoshu}" where id=${id}`,
  function (error, results) {
    if (error == null) {
      console.log(results); // 返回结果是一个对象
      console.log(results.affectedRows); // 受影响的行数,如果大于0,说明新增成功
    }
  }
);

// 关闭连接
connection.end();

nodejs操作数据库-查

// 导包
const express = require("express");
var mysql = require("mysql");

// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});

// 打开连接
// 其实这里这句代码可以不写,这个插件内部在你调用query执行sql语句的时候会自动的帮你打开连接
connection.connect();

// 执行sql语句
connection.query("select * from user", function (error, results, fields) {
  // 错误对象,如果没有错误就返回null
  // console.log(error);
  // 执行sql语句得到的结果集,有错的话就是undefined
  console.log(results);
  //   console.log(results[4].username);
  // 拿到的是字段的信息
  //   console.log(fields);
});

// 关闭连接
// 其实也可以不写,也是会自动关闭连接
connection.end();

用数据库新增和查询接口

// 导包
const express = require("express");
const multer = require("multer");
const bodyParser = require("body-parser");
const mysql = require("mysql");

// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});
// 创建一个uploads文件
var upload = multer({ dest: "uploads/" });

// 创建服务器
const app = express();

// 将uploads文件夹暴露出去,使得此文件夹内的文件可以直接被访问到
app.use(express.static("uploads"));

// 写路由
// 1. 写一个新增接口
// 参数:heroName,heroSkill,heroIcon(文件), 使用multer从前端接收
app.post("/hero/add", upload.single("heroIcon"), (req, res) => {
  let heroIcon = "http://127.0.0.1:4399/" + req.file.filename;
  let { heroName, heroSkill } = req.body;
  // 执行sql语句
  connection.query(
    `insert into hero(heroName,heroSkill,heroIcon) values("${heroName}","${heroSkill}","${heroIcon}")`,
    function (error, results) {
      if (error == null) {
        // 如果没有错则响应一个code为200的json对象
        res.send({
          code: 200,
          msg: "新增成功",
        });
      } else {
        res.send({
          code: 500,
          msg: "新增失败",
        });
      }
    }
  );
});

// 2. 写一个查询所有的英雄接口
// 参数:无
app.get("/hero/all", (req, res) => {
  // 直接读取数据库表中的所有的英雄,返回
  // 执行sql语句
  connection.query(
    `select id,heroName,heroSkill,heroIcon from hero where isDelete="false"`,
    function (error, results) {
      if (error == null) {
        // 如果没有错则响应一个code为200的json对象
        res.send({
          code: 200,
          msg: "查询成功",
          data: results,
        });
      } else {
        res.send({
          code: 500,
          msg: "服务器内部错误",
        });
      }
    }
  );
});

// 开启服务器
app.listen(4399, () => {
  console.log("服务器开启成功...");
});

如何自己写一个模块

我们自己写的模块

// 变量
// let foodName = "红烧肉";
// // 把foodName暴露出去,为了使其可以被其他js文件导入
// module.exports = foodName;

// 函数
// function test() {
//   console.log("我是test函数");
// }
// module.exports = test;

// 对象
let db = {
  baseUrl: "http://127.0.0.1:4399",
  insert() {
    console.log("我是插入的方法");
  },
  delete() {
    console.log("我是删除的方法");
  },
};
module.exports = db;

使用我们自己写的模块

// 导包
const path = require("path");
const myMoudle = require(path.join(__dirname, "01-我们自己写的模块.js"));
// console.log(myMoudle);
// myMoudle();
console.log(myMoudle.baseUrl);
myMoudle.insert();
myMoudle.delete();

自己封装一个mysql模块

我们自己写的一个mysql模块

天意阿里巴巴企业商务
天意阿里巴巴企业商务

主要分类如下:供求商机(trade leades) 产品展示(product) 企业名录(companies) 会员商务助手(MY trade office)前台功能介绍:1、网页首页显示有精品推荐,商业机会分类列表,最新供求信息,网站动态,最新企业等;2、商业机会栏目功能有:二级分类,已经带有详细分类的数据库,后台可以更改增加操作;3、展厅展品栏目功能:二级分类,已经带有详细分类的数据库,

下载
const mysql = require("mysql");
// 创建一个和数据库的连接
var connection = mysql.createConnection({
  host: "localhost", // 数据库服务器的地址
  user: "root", // 账号
  password: "lijiazhao123", // 密码
  database: "maxiaoyu", // 数据库名
});

module.exports = {
  // connection: connection
  // 简写
  connection,
};

使用我们自己写的mysql模块

// 导包
const express = require("express");
const path = require("path");
// 导入我们自己写的mysql模块
const db = require(path.join(__dirname, "03-我们自己写一个mysql的模块.js"));

// 创建服务器
const app = express();

// 写一个查询所有英雄接口
app.get("/hero/all", (req, res) => {
  // 这里使用我们自己写的mysql模块,来操作数据库
  // 这里的db,就相当于是03那个文件里面暴露出来的对象
  // 这个对象里面又connection这个连接
  db.connection.query(
    `select id,heroName,heroSkill,heroIcon from hero where isDelete="false"`,
    (error, results) => {
      if (error == null) {
        res.send({
          code: 200,
          msg: "查询成功",
          data: results,
        });
      } else {
        res.send({
          code: 500,
          msg: "服务器内部错误",
        });
      }
    }
  );
});

// 开启服务器
app.listen(4399, () => {
  console.log("服务器开启了");
});

mysql-ithm 第三方库的基本使用

//导入模块
const hm = require("mysql-ithm");

//2.连接数据库
//如果数据库存在则连接,不存在则会自动创建数据库
hm.connect({
  host: "localhost", //数据库地址
  port: "3306",
  user: "root", //用户名,没有可不填
  password: "lijiazhao123", //密码,没有可不填
  database: "hm", //数据库名称
});

//3.创建Model(表格模型:负责增删改查)
//如果table表格存在则连接,不存在则自动创建
let heroModel = hm.model("hero", {
  heroName: String,
  heroSkill: String,
});

// 4. 调用api
// 4.1 添加单个数据
// heroModel.insert(
//   { heroName: "波波", heroSkill: "骚的一批" },
//   (err, results) => {
//     console.log(err);
//     console.log(results);
//     if (!err) console.log("增加成功");
//   }
// );

// 4.2 批量添加数据
// let arr = [
//   {
//     heroName: "李白",
//     heroSkill: "一片诗意的酒,一曲长歌。一剑天涯,但愿长醉不复醒。",
//   },
//   {
//     heroName: "孙悟空",
//     heroSkill: "取经之路就在脚下,超脱三界之外,不在五行之中。",
//   },
//   { heroName: "貂蝉", heroSkill: "华丽又漂亮的生存到最后。" },
// ];
// heroModel.insert(arr, (err, results) => {
//   console.log(err);
//   console.log(results);
//   if (!err) console.log("增加成功");
// });

// 4.3 查询所有数据
// heroModel.find((err, results) => {
//   console.log(results);
// });

// 4.4 根据数据库字段查询部分数据
// ['name'] : 将要查询的字段放入数组中
// heroModel.find(["heroName", "heroSkill"], (err, results) => {
//   console.log(results);
// });

// 4.5 根据条件查询数据
// 'id=1' : 查询id为1的数据 (查询条件可以参考sql语句)
//例如 'age>10' : 查询age超过10的数据
//例如 'name>"张三"' : 查询名字为张三的数据,注意字符串添加引号
// heroModel.find("id>2", (err, results) => {
//   console.log(results);
// });

// 4.6 将数据库中 id = 1 的数据,age修改为30
// heroModel.update(
//   "id=2",
//   {
//     heroName: "千年之狐",
//     heroSkill: "青丘之灵的灵魂不会永远漂泊,因为我在这里",
//   },
//   (err, results) => {
//     console.log(results);
//   }
// );

//4.1 删除所有 id>3 的数据
// 这里删除是真正的把数据删掉
// 实际开发的时候不会用这个,因为开放的时候一般是软删除(使用更新)
heroModel.delete("id>3", (err, results) => {
  console.log(results);
});

王者荣耀抓包入库

  • 抓包

用到以下第三方库

crewler功能介绍:服务器端 DOM 和自动 jQuery 插入,使用 Cheerio(默认)或 JSDOM可配置的池大小和重做控制速率限制请求的优先级队列强制 8 模式, 让爬网程序处理与字符集检测和转换兼容 4.x 或较新版本
// 1. 抓包:用爬虫crawler插件来爬网页上的数据

// 1. 抓包
// 导包
var Crawler = require("crawler");

// 创建一个爬虫实例
var c = new Crawler({
  maxConnections: 10,
  // This will be called for each crawled page
  callback: function (error, res, done) {
    if (error) {
      console.log(error);
    } else {
      var $ = res.$;
      // $ is Cheerio by default
      //a lean implementation of core jQuery designed specifically for the server
      //   console.log(JSON.parse(res.body)); // 所有的英雄,这是一个包含了很多对象的数组

      // 所有的英雄 都要去获取他的头像和技能
      // 所以要遍历出每一个英雄的ename,凭借一个详情页路径重新发请求
      JSON.parse(res.body).forEach((v) => {
        // console.log(`https://pvp.qq.com/web201605/herodetail/${v.ename}.shtml`);
        // Queue just one URL, with default callback
        xq.queue(`https://pvp.qq.com/web201605/herodetail/${v.ename}.shtml`);
      });
    }
    done();
  },
});

// 声明一个全局遍历heros数组,用来存放所有的英雄的
let heros = [];

// Queue just one URL, with default callback
c.queue("https://pvp.qq.com/web201605/js/herolist.json");

// 创建一个请求详情的爬虫实例
var xq = new Crawler({
  maxConnections: 10,
  // This will be called for each crawled page
  callback: function (error, res, done) {
    if (error) {
      console.log(error);
    } else {
      var $ = res.$;
      // $ is Cheerio by default
      //a lean implementation of core jQuery designed specifically for the server
      // 英雄名字 英雄技能 英雄头像
      // console.log($(".cover-name").text(), $(".skill-name>b").first().text());
      // console.log("https:" + $(".ico-play").prev("img").attr("src"));

      // 把获取到的英雄名字 英雄技能 英雄头像都添加到这个数组中
      heros.push({
        heroName: $(".cover-name").text(),
        heroSkill: $(".skill-name>b").first().text(),
        heroIcon: "https:" + $(".ico-play").prev("img").attr("src"),
        isDelete: false,
      });
    }
    done();
  },
});

// 要等待所有的请求全部做完之后,才入库
xq.on("drain", function () {
  // For example, release a connection to database.
  // 调用API:添加数据
  heroModel.insert(heros, (err, results) => {
    console.log(err);
    console.log(results);
    if (!err) console.log("增加成功");
  });
});
  • 入库

用到以下第三方库

就是用来操作MySQL的

// 2. 入库:用mysql-ithm插件把爬到的数据装进数据库中
//1.导入模块
const hm = require("mysql-ithm");

//2.连接数据库
//如果数据库存在则连接,不存在则会自动创建数据库
hm.connect({
  host: "localhost", //数据库地址
  port: "3306",
  user: "root", //用户名,没有可不填
  password: "lijiazhao123", //密码,没有可不填
  database: "wzry", //数据库名称
});

//3.创建Model(表格模型:负责增删改查)
//如果table表格存在则连接,不存在则自动创建
let heroModel = hm.model("hero", {
  heroName: String,
  heroSkill: String,
  heroIcon: String,
  isDelete: String,
});

更多编程相关知识,请访问:编程入门!!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

2

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

24

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

80

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

187

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

339

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

116

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

180

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

31

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

81

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
快速入门Node.JS全套完整版
快速入门Node.JS全套完整版

共83课时 | 9.1万人学习

nodejs开发基础教程
nodejs开发基础教程

共15课时 | 4.6万人学习

JavaScript设计模式视频教程
JavaScript设计模式视频教程

共28课时 | 5.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号