node.js学习笔记Day2

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

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

学习的是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 mysql

added 9 packages, and audited 109 packages in 10s

5 vulnerabilities (1 low, 4 critical)

To address all issues (including breaking changes), run:
npm audit fix --force

Run 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”,//ip
user: “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
版权所有 © Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS 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 -g

added 116 packages, and audited 117 packages in 29s

16 packages are looking for funding
run npm fund for details

found 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 */;
然后今天的学习也就结束了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值