目录

第一部分:用npm安装mysql模块

第二部分:在项目内创建

第三部分:引用opreateDB方法

第四部分:解决异步方法的问题

第五部分:关于热启动

第六部分:关于接收参数和带参查询数据

今天的学习笔记是在我的上一篇博客学习笔记的基础上进行的

学习的是nodejs之express框架。

有值得注意的地方,就是node安装在哪,你的项目也需要在node安装的文件夹内才能执行到node命令,不然就会报错node不是执行命令。

第一部分:用npm安装mysql模块

在集成终端中输入

卸载mysql模块命令:npm install mysql

卸载mysql模块命令:npm uninstall mysql

查看mysql现安装的版本信息命令:npm view mysql version

查看mysql所有版本信息命令:npm view mysql versions

下载指定mysql模块版本指令:npm install mysql@(版本号)

PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> npm install mysqladded 9 packages, and audited 109 packages in 10s5 vulnerabilities (1 low, 4 critical)To address all issues (including breaking changes), run:npm audit fix --forceRun `npm audit` for details.
PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> npm view mysql version
2.18.1
PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> npm view mysql versions
['0.1.0',        '0.2.0',        '0.3.0',        '0.4.0','0.5.0',        '0.6.0',        '0.7.0',        '0.8.0','0.9.0',        '0.9.1',        '0.9.2',        '0.9.3','0.9.4',        '0.9.5',        '0.9.6',        '2.0.0-alpha','2.0.0-alpha2', '2.0.0-alpha3', '2.0.0-alpha4', '2.0.0-alpha5','2.0.0-alpha6', '2.0.0-alpha7', '2.0.0-alpha8', '2.0.0-alpha9','2.0.0-rc1',    '2.0.0-rc2',    '2.0.0',        '2.0.1','2.1.0',        '2.1.1',        '2.2.0',        '2.3.0','2.3.1',        '2.3.2',        '2.4.0',        '2.4.1','2.4.2',        '2.4.3',        '2.5.0',        '2.5.1','2.5.2',        '2.5.3',        '2.5.4',        '2.5.5','2.6.0',        '2.6.1',        '2.6.2',        '2.7.0','2.8.0',        '2.9.0',        '2.10.0',       '2.10.1','2.10.2',       '2.11.0',       '2.11.1',       '2.12.0','2.13.0',       '2.14.0',       '2.14.1',       '2.15.0','2.16.0',       '2.17.0',       '2.17.1',       '2.18.0','2.18.1'
]
PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> 

然后可以在package-lock.json中的"packages"确认是否有mysql模块的依赖在里面,他会出现"mysql": "^2.18.1"的版本号。

  "packages": {"": {"name": "myseifapi","version": "0.0.0","dependencies": {"cookie-parser": "~1.4.4","debug": "~2.6.9","express": "~4.16.1","http-errors": "~1.6.3","jade": "~1.11.0","morgan": "~1.9.1","mysql": "^2.18.1"}},

第二部分:在项目内创建

一个util文件夹,里面创建一个dbconfig.js配置连接mysql数据库的工具类。

dbconfig.js文件

//导入mysql模块
const mysql = require("mysql");
//配置连接mysql的数据源
const config = {host: "localhost",//地址port: "3306",//ipuser: "root",//mysql用户名password: "root123",//mysql密码database: "liudb"//访问的数据库
}
//一个小技巧,可以直接到module里面编写默认暴露方法
module.exports = {/*** * @param {sql语句} sql * @param {sql语句中代表?占位符的参数} sqlArr * 解释:因为这个方法是异步方法,所以存在一些专属于异步的问题需要注意。*/opreateDB: function (sql, sqlArr) {return new Promise((resolve, reject) => {let pool = mysql.createPool(config);//getConnection是打开mysql数据库连接的作用,数据库连接池pool.getConnection((err, conn) => {//如果出现错误err就会有值if (err) {//err不为空就交给reject进行处理reject(err);}//执行sql语句方法,此方法为异步方法。conn.query(sql, sqlArr, (err, data) => {//同上,有错不为空if (err) {//同上,不为空交给reject处理。reject(err);} else {resolve(data);}//执行完sql语句后关闭连接。conn.release();})})}).catch(e => {//进行报错处理。console.log(e);})}
}

第三部分:引用opreateDB方法

在routes文件夹下的index.js中引用dbconfig中的opreateDB方法访问数据库

index.js文件

var express = require('express');
var router = express.Router();
//导入dbconfig.js文件
var db = require("../util/dbconfig.js");/* GET home page. */
//修改路由为/login
router.get('/login', function (req, res, next) {//编写sql语句let sql = "select * from user";//第二个参数sqlarr参数没有就传入一个空的参数db.opreateDB(sql, []).then(e => {//打印查询结果console.log(e);})res.render('index', { title: 'Express' });
});module.exports = router;

然后启动服务器,在网页上访问localhost/login就可以在vs code的集成终端中看到访问的数据了。

PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> node app.js
服务器启动...
GET /login 200 2261.522 ms - 170
GET /stylesheets/style.css 200 10.907 ms - 111
GET /favicon.ico 404 18.638 ms - 1622
[RowDataPacket { userId: 1, userName: '刘一', userPwd: '123' },RowDataPacket { userId: 2, userName: '陈二', userPwd: '123' },RowDataPacket { userId: 3, userName: '张三', userPwd: '123' },RowDataPacket { userId: 4, userName: '李四', userPwd: '123' },RowDataPacket { userId: 5, userName: '王五', userPwd: '123' },RowDataPacket { userId: 6, userName: '赵六', userPwd: '123' },RowDataPacket { userId: 7, userName: '孙七', userPwd: '123' },RowDataPacket { userId: 8, userName: '周八', userPwd: '123' },RowDataPacket { userId: 9, userName: '吴九', userPwd: '123' },RowDataPacket { userId: 10, userName: '郑十', userPwd: '123' },RowDataPacket { userId: 11, userName: '小张', userPwd: '123' },RowDataPacket { userId: 12, userName: '小王', userPwd: '123' },RowDataPacket { userId: 13, userName: '小刘', userPwd: '123' }
]

第四部分:解决异步方法的问题

首先现改动一些结构使整个项目更具结构化,把路由里面的index.js改动为里面只写路由,只管理路由,不写任何逻辑代码或者方法

var express = require('express');
var router = express.Router();
//导入dbconfig.js文件
var index = require("../controller/index.js");/* GET home page. */
//修改路由为/login
//把里面function代码替换成了自己建立的一个专属的控制器controller类里面的一个方法
//指明这个类或者文件中专门只管路由,方法交给controller去管理控制
router.get('/login', index.login);module.exports = router;

然后再项目里面创建一个controller控制器文件夹或者包

然后再里面创建一个index.js文件,里面的代码专管路由后的逻辑处理代码

在里面创建一个登录方法,在方法前声明这还是一个同步方法

async是声明同步方法的意思,起声明作用

然后再解决db.opreateDB(sql, []);异步的问题,在前面声明await

await是等待db.opreateDB执行结束后才进行下面的程序一个声明,这就是解决异步问题的关键

//导入dbconfig.js文件
var db = require("../util/dbconfig.js");
//创建一个方法
//其中async是声明这是一个同步方法
//await是等待执行完后在执行后面的程序
async function login(req, res) {//编写sql语句let sql = "select * from user";//第二个参数sqlarr参数没有就传入一个空的参数//then是执行后等待结果通过回调函数来达到异步改同步的目的// db.opreateDB(sql, []).then(e => {//   //打印查询结果//   console.log(e);// })let data = await db.opreateDB(sql, []);res.send(data);
};module.exports = {login
}

浏览器输出的结果

第五部分:关于热启动

首先先设置权限,需要打开电脑的window powershell用管理员身份打开

然后输入命令:get-executionpolicy

然就就会输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6PS C:\Users\Administrator> get-executionpolicy
Restricted
PS C:\Users\Administrator>

如果修改失败可以输入这段命令:set-executionpolicy Remotesigned

PS C:\Users\Administrator> set-executionpolicy Remotesigned执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): y
PS C:\Users\Administrator>

注意再打开VS code的时候也尽量用管理员身份打开

然后再VS code的集成终端中安装热启动,输入这段命令:npm install nodemon -g

PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> npm install nodemon -gadded 116 packages, and audited 117 packages in 29s16 packages are looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities
PS F:\T2009小刘(可以参观,请别破坏!!!)\nodeJS课程\node\myseifAPI> 

这样就安装好了热启动模块了,再启动的时候从node app.js改为nodemon app.js就可以热启动了

第六部分:关于接收参数和带参查询数据

接收参数就用到了req中的一个方法query;他会返回一个对象出来。

然后对象也可以点出来req.query.****;

然后就在浏览器中可以输入http://localhost/login?userName=dowson&userPwd=123

就可以执行成功了。

//导入dbconfig.js文件
var db = require("../util/dbconfig.js");
//创建一个方法
//其中async是声明这是一个同步方法
//await是等待执行完后在执行后面的程序
async function login(req, res) {//接收参数let {userName,userPwd} = req.query;console.log(userName);console.log(userPwd);//编写sql语句let sql = "select * from user where userName=? and userPwd=?";//第二个参数sqlarr参数没有就传入一个空的参数//then是执行后等待结果通过回调函数来达到异步改同步的目的// db.opreateDB(sql, []).then(e => {//   //打印查询结果//   console.log(e);// })let data = await db.opreateDB(sql, [userName,userPwd]);res.send(data);
};module.exports = {login
}

然后我的sql表

/*
SQLyog Ultimate v12.4.1 (64 bit)
MySQL - 5.7.31-log : Database - liudb
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`liudb` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `liudb`;/*Table structure for table `user` */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`userId` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(20) DEFAULT NULL,`userPwd` varchar(20) DEFAULT NULL,PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;/*Data for the table `user` */insert  into `user`(`userId`,`userName`,`userPwd`) values
(1,'刘一','123'),
(2,'陈二','123'),
(3,'张三','123'),
(4,'李四','123'),
(5,'王五','123'),
(6,'赵六','123'),
(7,'孙七','123'),
(8,'周八','123'),
(9,'吴九','123'),
(10,'郑十','123'),
(11,'小张','123'),
(12,'小王','123'),
(13,'小刘','123'),
(14,'dowson','123');/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

然后今天的学习也就结束了。

node.js学习笔记Day2相关推荐

  1. node.js学习笔记

    # node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...

  2. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  3. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  4. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  5. node.js 学习笔记(二)模板引擎和C/S渲染

    node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...

  6. 千锋Node.js学习笔记

    千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...

  7. 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)

    唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...

  8. Node.js学习笔记 [黑马程序员]——day2

    文章目录 模块化的基本概念 模块化规范 Node.js 中模块的分类 Node.js 中模块的分类 加载模块 Node.js 中的模块作用域 向外共享模块作用域中的成员 `module` 对象 `mo ...

  9. node.js学习笔记 - 文件上传(并用七牛云托管)

    文章目录 环境搭建 准备工作 安装相关依赖 代码实现 执行 环境搭建 准备工作 提示:本文采用ts来构建环境,要是以js构建则取掉类型定义即可. 初始化项目 创建目录fileUpload-demo- ...

最新文章

  1. 纠错工具之 - Proovread
  2. Java Socket通信编程
  3. python求pai的近似值_Python实现蒙特卡洛模拟(第1部分)【个人翻译自Medium】
  4. http://www.cda.cn/view/25735.html
  5. 【目标检测】单阶段算法--YOLOv1详解
  6. python中列表相加规则_在Python字典列表中使用公共键/值求和值
  7. js 实现网站来消息网站标题闪动提示 .
  8. PHP lareal_怎么样能在mysql里结合php的函数
  9. python门牌制作
  10. Hadoop 开源调度系统zeus
  11. 校园卡管理系统实验报告c语言,校园卡管理系统-C语言.doc
  12. Python如何连mysql数据库教程
  13. 植物大战僵尸:游戏中的“修改器【Python】”一定是作弊?善用增加趣味性!
  14. 要闻君说:华为与故宫携手共建智慧紫禁城;央视315曝光瞄准大数据黑市;华为官宣称自己也有操作系统了;美国夸口启动6G研发?...
  15. 系统学习dede标签
  16. 百度基础架构部马如悦:我的Hadoop…
  17. 酷炫的交互动画和视觉效果
  18. 什么是抽象类?抽象类有什么特点?举例说明抽象类及其成员的定义方法。
  19. Python基础,day2
  20. 用java简单画一条线

热门文章

  1. 阿里飞猪搜索技术的应用与创新(v2021-02-03)
  2. GraphGallery,一个基于TensorFlow 2.x与 PyTorch 的GNN benchmark 框架
  3. Adobe国际认证设计师含金量,能否代表设计师的真实水平?
  4. WFP实现的端口复用
  5. DINO 论文精度,并解析其模型结构 DETR 的变体
  6. Keil uVision4使用总结
  7. Vue对高德地图2.0的封装使用
  8. vant list 分页问题
  9. 部落冲突-家乡防御建筑-加农炮(1级至20级)
  10. Windows 7 插入耳机后没声音,拔下后扬声器有声音