博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs 操作数据库
阅读量:2054 次
发布时间:2019-04-28

本文共 10509 字,大约阅读时间需要 35 分钟。

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模块

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 callbackc.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,});

转载地址:http://xcclf.baihongyu.com/

你可能感兴趣的文章
Linux Capabilities 入门:如何管理文件的 capabilities?
查看>>
Linux Capabilities 入门教程:基础实战篇
查看>>
如何向纯洁的女朋友解释并发与并行的区别?
查看>>
一名云原生搬砖师的自白
查看>>
红帽宣布发布企业容器仓库开源项目 Quay
查看>>
跨平台构建 Docker 镜像新姿势,x86、arm 一把梭
查看>>
k8s v1.17 新特性预告: 拓扑感知服务路由
查看>>
彻底理解矩阵乘法
查看>>
使用 buildx 构建多平台 Docker 镜像
查看>>
Kubelet 中的 “PLEG is not healthy” 到底是个什么鬼?
查看>>
不懂OpenShift,不足以谈云计算!
查看>>
别让自己“墙”了自己
查看>>
让你的网站用上炫酷的中文字体
查看>>
使用 font-spider 对 webfont 网页字体进行压缩
查看>>
云原生服务网格 Istio 1.4 部署指南
查看>>
让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
查看>>
Istio 1.4 部署指南
查看>>
贫苦家庭用户的 Envoy xDS 控制平面
查看>>
Kubernetes Pod 网络精髓:pause 容器详解
查看>>
Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API
查看>>