最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Node實(shí)現(xiàn)可以操作MySQL的接口

 更新時(shí)間:2024年05月30日 09:05:01   作者:去偽存真  
這篇文章主要介紹了用Node寫個(gè)可以操作MySQL的接口,以前也用Node寫過接口,但不涉及數(shù)據(jù)庫操作,而我們發(fā)現(xiàn),后端寫接口,基本都繞不開數(shù)據(jù)庫操作,感覺不寫一個(gè)能操作數(shù)據(jù)庫的接口,就不算真正意義上學(xué)會(huì)了寫接口,那我們今天就學(xué)習(xí)一下,如何寫一個(gè)可以操作數(shù)據(jù)庫的接口

前言

以前也用Node寫過接口,但不涉及數(shù)據(jù)庫操作。而我們發(fā)現(xiàn),自己公司的后端寫接口,基本都繞不開數(shù)據(jù)庫操作。感覺不寫一個(gè)能操作數(shù)據(jù)庫的接口,就不算真正意義上學(xué)會(huì)了寫接口。那我們今天就學(xué)習(xí)一下,如何寫一個(gè)可以操作數(shù)據(jù)庫的接口。下面我們進(jìn)入正題。

創(chuàng)建Express項(xiàng)目

Express 是一個(gè)簡(jiǎn)潔而靈活的Node Web應(yīng)用框架, 通過對(duì)底層接口進(jìn)行封裝,在簡(jiǎn)化代碼的同時(shí)提供更強(qiáng)大的接口,大幅度提升開發(fā)效率和體驗(yàn),將開發(fā)者從冗長、復(fù)雜、易錯(cuò)的代碼中解放出來。與創(chuàng)建Vue和React應(yīng)用一樣,創(chuàng)建Express項(xiàng)目也有腳手架可供使用。express-generator是Express的應(yīng)用生成器,用它可以快速創(chuàng)建一個(gè)Express的應(yīng)用骨架。

生成項(xiàng)目

安裝express-generator并生成一個(gè)名為nodeApi的Express Web應(yīng)用,命令如下:

npm i -g express-generator
express nodeApi

生成的項(xiàng)目目錄結(jié)構(gòu)如下:

express項(xiàng)目目錄簡(jiǎn)介:

bin:可執(zhí)行文件。里面包含了一個(gè)啟動(dòng)文件 www 默認(rèn)監(jiān)聽端口是 3000。

public:靜態(tài)文件。用來存放項(xiàng)目靜態(tài)文件如js+css以及圖片。

routes:路由文件。路由主要定義url和 資源的映射關(guān)系, 用來接收前端發(fā)送的請(qǐng)求,把響應(yīng)數(shù)據(jù)給前端

views:后端視圖模版文件。

app.js:入口文件。

運(yùn)行項(xiàng)目

推薦使用pnpm安裝項(xiàng)目依賴,速度比npm要快一些。安裝完依賴之后啟動(dòng)項(xiàng)目,后端服務(wù)不像前端項(xiàng)目,會(huì)自動(dòng)打開一個(gè)頁面。

pnpm install && node bin/www

需在瀏覽器地址欄輸入http://localhost:3000/, 如果能看到如下界面,說明項(xiàng)目啟動(dòng)正常。

使用Docker安裝MySQL

為什么不直接安裝MySQL,而要使用Docker安裝MySQL呢?因?yàn)镈ocker能保證運(yùn)行環(huán)境的一致性,不會(huì)出現(xiàn)開發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境同樣的配置表現(xiàn)不一致的問題。其次,我看公司的生產(chǎn)環(huán)境也是在Docker上運(yùn)行MySQL。

安裝Docker

筆者使用的是Win操作系統(tǒng),Windows下Docker的安裝方法參見此文。如果Win系統(tǒng)提示無法安裝Docker,那你需要開啟一下Hyper-V功能,如果Hyper-V 虛擬機(jī)監(jiān)控程序處于禁用狀態(tài),那你需要在開機(jī)的時(shí)候進(jìn)入BIOS中,修改一下虛擬技術(shù)配置(不同品牌的電腦設(shè)置有差異,請(qǐng)自行搜索一下)。

運(yùn)行MySQL

docker安裝完成之后,需要重啟電腦。重啟之后運(yùn)行docker,然后在命令行執(zhí)行拉取MySQL鏡像命令

docker pull mysql:latest

在docker中安裝完MySQL后,使用以下命令來運(yùn)行mysql容器:

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

參數(shù)說明:

  • -itd 以交互模式在后臺(tái)運(yùn)行容器
  • --name設(shè)置容器名稱
  • -p 3306:3306 :映射容器服務(wù)的 3306 端口到宿主機(jī)的 3306 端口,外部主機(jī)可以直接通過 宿主機(jī)ip:3306 訪問到 docker容器的MySQL的服務(wù)。
  • -e MYSQL_ROOT_PASSWORD=123456 :設(shè)置 MySQL服務(wù) root 用戶的密碼。

運(yùn)行結(jié)果如圖所示:

另外再補(bǔ)充兩條命令,因?yàn)閐ocker的bash中沒有vi/vim指令, 造成修改mysql配置文件困難。為了解決這個(gè)問題,可以先把docker中的mysql配置文件復(fù)制到主機(jī),修改完成之后,再用主機(jī)修改之后的配置文件覆蓋docker中的mysql配置文件。

復(fù)制docker容器文件到主機(jī)

docker cp 容器id:/etc/my.cnf ./my.cnf

將主機(jī)文件復(fù)制到docker容器

docker cp ./my.cnf 容器id:/etc/my.cnf

創(chuàng)建數(shù)據(jù)

在MySQL中創(chuàng)建數(shù)據(jù)有兩種方式,第一種是使用SQL命令,第二種是使用可視化工具(推薦第二種)。

用SQL命令

# step1 查看容器id
docker ps
# step2 進(jìn)入docker命令行模式
docker exec -it 容器id ./bin/bash
# step3 輸入密碼登錄mysql
mysql -u root -p
# step4 創(chuàng)建數(shù)據(jù)庫并插入數(shù)據(jù)
create database demo character set utf8mb4 collate utf8mb4_unicode_ci;
use demo;
# 創(chuàng)建表
create table users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  mobile VARCHAR(100) NOT NULL
);
# 向表中插入數(shù)據(jù)
insert into users (name, mobile) values  ('zhangsan', '13800000000');
insert into users (name, mobile) values ('lisi', '13800000001');
# 查看數(shù)據(jù)
select * from users;
# 退出mysql
quit;
# 退出docker容器命令行(非SQL命令)
exit

用可視化工具

windows上推薦安裝Navicat數(shù)據(jù)庫管理工具軟件,下載安裝之后,創(chuàng)建連接, 界面配置參數(shù)如下:

連接成功之后, 進(jìn)入到demo數(shù)據(jù)庫的users表,可以看到之前用SQL命令插入的數(shù)據(jù)。添加刪除一條數(shù)據(jù)點(diǎn)擊一下底部的+,-號(hào)即可,比用SQL命令方便一些。

編寫接口操作數(shù)據(jù)庫功能

借助Knex操作數(shù)據(jù)庫

為什么要用Knex操作MySQL,而不是直接使用npm中的mysql/mysq2工具包? 因?yàn)閚pm的mysql/mysq2在復(fù)雜查詢、遷移和事務(wù)處理上,需要手動(dòng)操作數(shù)據(jù)庫,而且也不支持Promise鏈?zhǔn)秸{(diào)用。

Knex.js 是一個(gè)功能齊全的 SQL 查詢構(gòu)造器(query builder),支持 PostgreSQL、CockroachDB、MSSQL、MySQL、MariaDB、SQLite3、Better-SQLite3、Oracle 和 Amazon Redshift 等數(shù)據(jù)庫,同時(shí)支持傳統(tǒng) node 風(fēng)格的 callback 回調(diào)和更加簡(jiǎn)潔的 promise異步接口,還支持 stream 接口、 全功能的 query(查詢 和 schema(模式)構(gòu)造器、事務(wù)(支持保存點(diǎn))、pooling(連接池),并且對(duì)不同的查詢客戶端以及 SQL 方言的執(zhí)行結(jié)果進(jìn)行了標(biāo)準(zhǔn)化。

安裝knex和mysql2

注意要安裝的mysql依賴包名叫mysql2而不是mysql, 前面我們安裝的是最新版MySQL,最新版的MySQL服務(wù)端不支持低版本mysql客戶端的加密方式,連接時(shí)會(huì)報(bào)錯(cuò)。需要改成高版本的MySQL客戶端 依賴包mysql2,才能正常連接。

pnpm add knex mysql2

創(chuàng)建數(shù)據(jù)庫配置文件

數(shù)據(jù)庫配置文件config.js內(nèi)容如下,實(shí)際使用時(shí)這段代碼不能提交到代碼倉庫,要把敏感信息都寫入到環(huán)境變量里,這里僅作演示.

const configs = {
  mysql: {
    host: "localhost",
    port: "3306",
    user: "root", // 數(shù)據(jù)庫用戶
    password: "123456", // 數(shù)據(jù)庫密碼
    database: "demo", // 數(shù)據(jù)庫的名字
  },
  // 打印錯(cuò)誤
  log: {
    error(message) {
      console.log("[knex error]", message);
    },
  },
};

module.exports = configs;

編寫基本功能

const configs = require("../config");
const knex = require("knex")({
  // 鏈接配置
  connection: {
    host: configs.mysql.host,
    port: configs.mysql.port,
    user: configs.mysql.user,
    password: configs.mysql.password,
    database: configs.mysql.database,
  },
  // 客戶端版本
  client: "mysql2",
  // 打印錯(cuò)誤
  log: {
    error(message) {
      console.log("[knex error]", message);
    },
  },
});

class Base {
  constructor(props) {
    this.table = props.table;
  }

  // 新增
  insert(params) {
    return knex(this.table).insert(params);
  }

  // 更改
  update(id, params) {
    return knex(this.table).where("id", "=", id).update(params);
  }

  // 刪除
  delete(id) {
    return knex(this.table).where("id", "=", id).del();
  }

  // 查找
  query() {
    return knex(this.table).select();
  }
}

module.exports = Base;

編寫主程序

接下來我們按照MVC的業(yè)務(wù)邏輯組織模式,實(shí)現(xiàn)主程序功能。先寫增改刪查的控制器功能。代碼功能一看就懂,這里就不詳細(xì)解釋了。

// 引用用戶模版數(shù)據(jù)
const User = require("../models/user.js");

const userController = {
  // 獲取用戶數(shù)據(jù)
  queryUser: async (req, res, next) => {
    try {
      let resData = await User.query();
      res.json({
        code: 200,
        message: "操作成功",
        data: resData,
      });
    } catch (e) {
      res.json({ code: 0, message: "操作失敗", data: e });
    }
  },
  // 添加用戶數(shù)據(jù)
  addUser: async (req, res, next) => {
    try {
      let resData = await User.insert(req.body);
      res.json({
        code: 200,
        message: "操作成功",
        data: resData,
      });
    } catch (e) {
      res.json({ code: 0, message: "操作失敗", data: e });
    }
  },
  // 更新用戶數(shù)據(jù)
  updateUser: async (req, res, next) => {
    const { id, params } = req.body;
    try {
      let resData = await User.update(id, params);
      res.json({
        code: 200,
        message: "操作成功",
        data: resData,
      });
    } catch (e) {
      res.json({ code: 0, message: "操作失敗", data: e });
    }
  },
  // 刪除用戶數(shù)據(jù)
  delUser: async (req, res, next) => {
    try {
      let resData = await User.delete(req.body.id);
      res.json({
        code: 200,
        message: "操作成功",
        data: resData,
      });
    } catch (e) {
      res.json({ code: 0, message: "操作失敗", data: e });
    }
  },
};

module.exports = userController;

接著寫控制器引用的模型文件功能,主要是繼承數(shù)據(jù)庫基礎(chǔ)操作Base類的功能,支持配置表格名稱。

const Base = require("./base");

class User extends Base {
  // 定義參數(shù)默認(rèn)值為 user 表
  constructor(props = { table: "users" }) {
    super(props);
  }
}
module.exports = new User();

再看看路由文件,定義請(qǐng)求URL和相應(yīng)方法的對(duì)應(yīng)關(guān)系。

const express = require("express");
const router = express.Router();
const userController = require("../controllers/user");

// ...

// 獲取用戶信息
router.get("/get_user", userController.queryUser);
// 新增用戶信息
router.post("/add_user", userController.addUser);
// 修改用戶信息
router.post("/update_user", userController.updateUser);
// 刪除用戶信息
router.post("/del_user", userController.delUser);

module.exports = router;

最后在入口文件app.js中,引入路由配置

const express = require("express");
var usersRouter = require("./routes/users");
const usersRouter = require("./routes/users");

const app = express();
// 支持json參數(shù)
app.use(express.json());
app.use("/users", usersRouter);

為了修改代碼能熱更新,需要全局安裝一下nodemon

npm i -g nodemon

并修改一下package.json中的服務(wù)啟動(dòng)命令,然后重啟服務(wù)。

  "scripts": {
    "start": "nodemon ./bin/www"
  },

重啟之后,用postwoman請(qǐng)求express服務(wù)接口,驗(yàn)證一下接口響應(yīng)是否正確??梢钥吹剑憫?yīng)正常。

在Navicat查看,這條數(shù)據(jù)已經(jīng)插入到demo數(shù)據(jù)庫中的users表了。至此我們已經(jīng)實(shí)現(xiàn)了通過接口操作數(shù)據(jù)庫功能。

結(jié)尾

通過本文的介紹,我們了解了如何使用 Express 框架寫接口操作 MySQL 數(shù)據(jù)庫。從Express應(yīng)用的創(chuàng)建、到MySQL數(shù)據(jù)庫的安裝,連接配置和數(shù)據(jù)庫的基本操作命令,以及接口Api的編碼和測(cè)試方法,我們一步步構(gòu)建了一個(gè)完整的可以操作MySQL數(shù)據(jù)庫的Express應(yīng)用程序。

以上就是基于Node實(shí)現(xiàn)可以操作MySQL的接口的詳細(xì)內(nèi)容,更多關(guān)于Node操作MySQL接口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

堆龙德庆县| 克山县| 阳信县| 青海省| 措美县| 沂南县| 织金县| 涪陵区| 灌阳县| 湖北省| 文水县| 霍山县| 科技| 且末县| 富裕县| 河西区| 九龙县| 腾冲县| 呼伦贝尔市| 蓝田县| 漯河市| 巨鹿县| 鹿泉市| 郓城县| 收藏| 公安县| 天水市| 日喀则市| 彭泽县| 海淀区| 祥云县| 商都县| 博罗县| 林西县| 平顶山市| 南雄市| 宜兰市| 萨迦县| 扎囊县| 广饶县| 开阳县|