node.js学习笔记Day2
目录
第一部分:用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相关推荐
- node.js学习笔记
# node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...
- node.js学习笔记14—微型社交网站
node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...
- Node.js学习笔记8
Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- node.js 学习笔记(二)模板引擎和C/S渲染
node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...
- 千锋Node.js学习笔记
千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...
- 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)
唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...
- Node.js学习笔记 [黑马程序员]——day2
文章目录 模块化的基本概念 模块化规范 Node.js 中模块的分类 Node.js 中模块的分类 加载模块 Node.js 中的模块作用域 向外共享模块作用域中的成员 `module` 对象 `mo ...
- node.js学习笔记 - 文件上传(并用七牛云托管)
文章目录 环境搭建 准备工作 安装相关依赖 代码实现 执行 环境搭建 准备工作 提示:本文采用ts来构建环境,要是以js构建则取掉类型定义即可. 初始化项目 创建目录fileUpload-demo- ...
最新文章
- 纠错工具之 - Proovread
- Java Socket通信编程
- python求pai的近似值_Python实现蒙特卡洛模拟(第1部分)【个人翻译自Medium】
- http://www.cda.cn/view/25735.html
- 【目标检测】单阶段算法--YOLOv1详解
- python中列表相加规则_在Python字典列表中使用公共键/值求和值
- js 实现网站来消息网站标题闪动提示 .
- PHP lareal_怎么样能在mysql里结合php的函数
- python门牌制作
- Hadoop 开源调度系统zeus
- 校园卡管理系统实验报告c语言,校园卡管理系统-C语言.doc
- Python如何连mysql数据库教程
- 植物大战僵尸:游戏中的“修改器【Python】”一定是作弊?善用增加趣味性!
- 要闻君说:华为与故宫携手共建智慧紫禁城;央视315曝光瞄准大数据黑市;华为官宣称自己也有操作系统了;美国夸口启动6G研发?...
- 系统学习dede标签
- 百度基础架构部马如悦:我的Hadoop…
- 酷炫的交互动画和视觉效果
- 什么是抽象类?抽象类有什么特点?举例说明抽象类及其成员的定义方法。
- Python基础,day2
- 用java简单画一条线