素材下载地址:https://pan.baidu.com/s/1HfNYzCdfrVUR-StdSUChoA
密码:1234
。下载完成后找到day5的资料。
在vs code中打开预览,按照教程一步步安装。
根据教程里的设置,密码为:admin123
最后设置的数据库如下图
注意:SQL语句中的关键字对大小写不敏感。SELECT等效于select,FROM等效于from。打开MySQL Workbench如下图,创建一个代码编辑器。
通过sql语句把users表中所有数据查询出来,点击下图红框即可运行编写的sql语句。
获取名为"username"和"password”的列的内容(从名为"users”的数据库表),在写新代码时要把旧代码注释掉。
代码小结:
-- 通过sql语句把users表中所有数据查询出来
-- select * from users 在写新代码时要把旧代码注释掉。
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
select username,password from users
向users 表中,插入一条username为 tony stark,password 为098123的用户数据,示例如下:
代码小结:
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
把users表中id为3的用户密码,更新为888888。示例如下:
代码小结:
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
update users set password='888888' where id =3
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
-- update users set password='888888' where id =3
-- 从users表中,删除id为3的用户
delete from users where id=3
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
-- update users set password='888888' where id =3
-- 从users表中,删除id为3的用户
-- delete from users where id=3
-- 演示where子句的使用,查询status为1的用户
-- select * from users where status=1
-- 演示where子句的使用,查询id大于2的用户
-- select * from users where id>2
-- 演示where子句的使用,查询用户名不是admin的用户
-- select * from users where username<>'admin'
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
-- update users set password='888888' where id =3
-- 从users表中,删除id为3的用户
-- delete from users where id=3
-- 演示where子句的使用,查询status为1的用户
-- select * from users where status=1
-- 演示where子句的使用,查询id大于2的用户
-- select * from users where id>2
-- 演示where子句的使用,查询用户名不是admin的用户
-- select * from users where username<>'admin'
-- 使用and来显示所有状态为0且id小于3的用户
-- select *from users where status=0 and id<3
-- 使用or来显示所有状态为1或username为张三的用户
select * from users where status=1 or username='张三'
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
-- update users set password='888888' where id =3
-- 从users表中,删除id为3的用户
-- delete from users where id=3
-- 演示where子句的使用,查询status为1的用户
-- select * from users where status=1
-- 演示where子句的使用,查询id大于2的用户
-- select * from users where id>2
-- 演示where子句的使用,查询用户名不是admin的用户
-- select * from users where username<>'admin'
-- 使用and来显示所有状态为0且id小于3的用户
-- select *from users where status=0 and id<3
-- 使用or来显示所有状态为1或username为张三的用户
-- select * from users where status=1 or username='张三'
-- 对users表中的数据,按照status字段按照默认的升序进行排序
-- select * from users order by status
-- 按照id 对表中的数据进行降序的排序,desc表示降序,asc表示升序
-- select * from users order by id desc
-- 多重排序,对users表中的数据,先按照 status进行降序排序,再按照username字母的顺序,进行升序的排序
select * from users order by status desc,username asc
-- 通过sql语句把users表中所有数据查询出来
-- 在写新代码时要把旧代码注释掉。
-- select * from users
-- 获取名为"username"和"password”的列的内容(从名为"users”的数据库表)
-- select username,password from users
-- 向users 表中,插入一条username为 tony stark,password 为098123的用户数据
-- insert into users (username,password) values ('tony stark','098123')
-- 把users表中id为3的用户密码,更新为888888
-- update users set password='888888' where id =3
-- 从users表中,删除id为3的用户
-- delete from users where id=3
-- 演示where子句的使用,查询status为1的用户
-- select * from users where status=1
-- 演示where子句的使用,查询id大于2的用户
-- select * from users where id>2
-- 演示where子句的使用,查询用户名不是admin的用户
-- select * from users where username<>'admin'
-- 使用and来显示所有状态为0且id小于3的用户
-- select *from users where status=0 and id<3
-- 使用or来显示所有状态为1或username为张三的用户
-- select * from users where status=1 or username='张三'
-- 对users表中的数据,按照status字段按照默认的升序进行排序
-- select * from users order by status
-- 按照id 对表中的数据进行降序的排序,desc表示降序,asc表示升序
-- select * from users order by id desc
-- 多重排序,对users表中的数据,先按照 status进行降序排序,再按照username字母的顺序,进行升序的排序
-- select * from users order by status desc,username asc
-- 使用count(*)来统计users表中,状态为0用户的总数量
-- select count(*) from users where status=0
-- 使用AS关键字给列起别名
select count(*) as total from users where status=0
以操作前文建立的my_db_01
数据库为例
新建一个45.js文件如下
代码如下
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 测试mysql模块能否正常工作,select 1没有实质性作用,只是用来测试
db.query('select 1', (err, results) => {
// mysql 模块工作报错
if (err) return console.log(err.message);
// 正常工作,没报错
console.log(results);
})
代码如下
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
const sqlstr = 'select * from users'
db.query(sqlstr, (err, results) => {
//查询数据失败
if (err) return console.log(err.message)
//查询数据成功
console.log(results)
})
终端运行后,查询到的内容与我们数据库内容一致。注意:如果执行的是select查询语句,则执行的查询结果是数组的形式显示出来。
修改46.js代码
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
const user = { username: 'Spider-Man', password: 'pcc123'}
//定义待执行的sQL语句,在sql中,英文的?表示占位符
const sqlStr = 'insert into users (username,password) values (?,?)'
//执行sQL语句,调用db.query()方法
db.query(sqlStr, [user.username, user.password], (err, results) => {
//执行sQL语句失败了
if (err) return console.log(err.message)
// 执行成功了,使用results.affectedRows属性判断
//注意:如果执行的是insert into插入语句,则results是一个对象
// 可以通过affectedRows属性,来判断是否插入数据成功
if (results.affectedRows === 1) {
console.log('执行插入语句成功了');
}
})
终端运行,注意:如果执行的是insert into插入语句,则results是一个对象,可以通过affectedRows属性,来判断是否插入数据成功。
查看数据库里的内容如下:为什么id是6呢,因为曾经有个id为5的数据,被删除了,该id就被占用过了,以后不再使用了。id的唯一性。
修改46.js代码
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
// const user = { username: 'Spider-Man', password: 'pcc123'}
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users (username,password) values (?,?)'
// //执行sQL语句,调用db.query()方法
// db.query(sqlStr, [user.username, user.password], (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示插入数据的便捷方式,如果数据对象的每个属性和数据表的字段一一对应,则可用以下方法
const user = { username: 'Iron-Man', password: '999' }
//定义待执行的sQL语句,在sql中,英文的?表示占位符
const sqlStr = 'insert into users set ?'
//执行sQL语句,调用db.query()方法,直接将数据对象作为插入的值
db.query(sqlStr, user, (err, results) => {
//执行sQL语句失败了
if (err) return console.log(err.message)
// 执行成功了,使用results.affectedRows属性判断
//注意:如果执行的是insert into插入语句,则results是一个对象
// 可以通过affectedRows属性,来判断是否插入数据成功
if (results.affectedRows === 1) {
console.log('执行插入语句成功了');
}
})
终端运行,然后点击刷新数据库,即可看到新增成功。
修改46.js代码
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
// const user = { username: 'Spider-Man', password: 'pcc123'}
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users (username,password) values (?,?)'
// //执行sQL语句,调用db.query()方法
// db.query(sqlStr, [user.username, user.password], (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示插入数据的便捷方式,如果数据对象的每个属性和数据表的字段一一对应,则可用以下方法
// const user = { username: 'Iron-Man9', password: '999' }
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users set ?'
// //执行sQL语句,调用db.query()方法,直接将数据对象作为插入的值
// db.query(sqlStr, user, (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示更新用户信息
const user = {
id: 6, username: 'aaa', password: '000'
}
//定义SQL语句
const sqlstr = 'update users set username=?,password=? where id=?'
//执行sQL语句
//注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功
db.query(sqlstr, [user.username, user.password, user.id], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新成功')
}
})
终端运行,注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
数据库内容发生改变了。
修改46.js代码
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
// const user = { username: 'Spider-Man', password: 'pcc123'}
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users (username,password) values (?,?)'
// //执行sQL语句,调用db.query()方法
// db.query(sqlStr, [user.username, user.password], (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示插入数据的便捷方式,如果数据对象的每个属性和数据表的字段一一对应,则可用以下方法
// const user = { username: 'Iron-Man9', password: '999' }
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users set ?'
// //执行sQL语句,调用db.query()方法,直接将数据对象作为插入的值
// db.query(sqlStr, user, (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示更新用户信息
// const user = {
// id: 6, username: 'aaa', password: '000'
// }
// //定义SQL语句
// const sqlstr = 'update users set username=?,password=? where id=?'
// //执行sQL语句
// //注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
// db.query(sqlstr, [user.username, user.password, user.id], (err, results) => {
// if (err) return console.log(err.message)
// if (results.affectedRows === 1) {
// console.log('更新成功')
// }
// })
// 演示更新数据的便捷方式
const user = {
id: 9, username: 'bbb', password: '77788'
}
//定义SQL语句
const sqlstr = 'update users set ? where id=?'
//执行sQL语句
//注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
db.query(sqlstr, [user, user.id], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新成功')
}
})
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
// const user = { username: 'Spider-Man', password: 'pcc123'}
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users (username,password) values (?,?)'
// //执行sQL语句,调用db.query()方法
// db.query(sqlStr, [user.username, user.password], (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示插入数据的便捷方式,如果数据对象的每个属性和数据表的字段一一对应,则可用以下方法
// const user = { username: 'Iron-Man9', password: '999' }
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users set ?'
// //执行sQL语句,调用db.query()方法,直接将数据对象作为插入的值
// db.query(sqlStr, user, (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示更新用户信息
// const user = {
// id: 6, username: 'aaa', password: '000'
// }
// //定义SQL语句
// const sqlstr = 'update users set username=?,password=? where id=?'
// //执行sQL语句
// //注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
// db.query(sqlstr, [user.username, user.password, user.id], (err, results) => {
// if (err) return console.log(err.message)
// if (results.affectedRows === 1) {
// console.log('更新成功')
// }
// })
// 演示更新数据的便捷方式
// const user = {
// id: 9, username: 'bbb', password: '77788'
// }
// //定义SQL语句
// const sqlstr = 'update users set ? where id=?'
// //执行sQL语句
// //注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
// db.query(sqlstr, [user, user.id], (err, results) => {
// if (err) return console.log(err.message)
// if (results.affectedRows === 1) {
// console.log('更新成功')
// }
// })
// 演示删除id为6的用户数据,
const sqlstr = 'delete from users where id=?'
//如果SQL语句中有多个占位符 ?,则必须使用数组为每个占位符指定具体的值
//如果SQL语句中只有一个占位符 ? 问号,则可以省略数组,比如这里只有一个id=?,一个占位符,所以直接传1个数就好了
db.query(sqlstr, 6,(err,results) => {
if (err) return console.log(err.message)
//注意:执行 delete语句之后,结果也是一个对象,也会包含affectedRows属性
if (results.affectedRows == 1) {
console.log('删除数据成功')
}
})
终端运行,在通过mysql workbench工具查看数据库,里边确实没有id为6的数据了
修改46.js代码
// 1.导入mysql 模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
host: '127.0.0.1',//数据库的IP地址
user: 'root',// 登录数据库的账号
password: 'admin123',// 登录数据库的密码
database: 'my_db_01',// 指定要操作哪个数据库
})
// 查询users表中所有数据
//注意:如果执行的是select查询语句,则执行的结果是数组
// const sqlstr = 'select * from users'
// db.query(sqlstr, (err, results) => {
// //查询数据失败
// if (err) return console.log(err.message)
// //查询数据成功
// console.log(results)
// })
//向users表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
// const user = { username: 'Spider-Man', password: 'pcc123'}
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users (username,password) values (?,?)'
// //执行sQL语句,调用db.query()方法
// db.query(sqlStr, [user.username, user.password], (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示插入数据的便捷方式,如果数据对象的每个属性和数据表的字段一一对应,则可用以下方法
// const user = { username: 'Iron-Man9', password: '999' }
// //定义待执行的sQL语句,在sql中,英文的?表示占位符
// const sqlStr = 'insert into users set ?'
// //执行sQL语句,调用db.query()方法,直接将数据对象作为插入的值
// db.query(sqlStr, user, (err, results) => {
// //执行sQL语句失败了
// if (err) return console.log(err.message)
// // 执行成功了,使用results.affectedRows属性判断
// //注意:如果执行的是insert into插入语句,则results是一个对象
// // 可以通过affectedRows属性,来判断是否插入数据成功
// if (results.affectedRows === 1) {
// console.log('执行插入语句成功了');
// }
// })
// 演示更新用户信息
// const user = {
// id: 6, username: 'aaa', password: '000'
// }
// //定义SQL语句
// const sqlstr = 'update users set username=?,password=? where id=?'
// //执行sQL语句
// //注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
// db.query(sqlstr, [user.username, user.password, user.id], (err, results) => {
// if (err) return console.log(err.message)
// if (results.affectedRows === 1) {
// console.log('更新成功')
// }
// })
// 演示更新数据的便捷方式
// const user = {
// id: 9, username: 'bbb', password: '77788'
// }
// //定义SQL语句
// const sqlstr = 'update users set ? where id=?'
// //执行sQL语句
// //注意:执行了update语句之后,执行的结果,也是一个对象,可以通过 affectedRows判断是否更新成功。
// db.query(sqlstr, [user, user.id], (err, results) => {
// if (err) return console.log(err.message)
// if (results.affectedRows === 1) {
// console.log('更新成功')
// }
// })
// 演示删除id为6的用户数据,
// const sqlstr = 'delete from users where id=?'
// //如果SQL语句中有多个占位符 ?,则必须使用数组为每个占位符指定具体的值
// //如果SQL语句中只有一个占位符 ? 问号,则可以省略数组,比如这里只有一个id=?,一个占位符,所以直接传1个数就好了
// db.query(sqlstr, 6,(err,results) => {
// if (err) return console.log(err.message)
// //注意:执行 delete语句之后,结果也是一个对象,也会包含affectedRows属性
// if (results.affectedRows == 1) {
// console.log('删除数据成功')
// }
// })
// 标记删除演示 ,使id为9的用户数据状态status变为1,表示被删除了
const sqlstr = 'update users set status=? where id=?'
// 因为这里有多个占位符? 问号,所以采用了数组的形式为每个占位符指定具体的值
db.query(sqlstr, [1, 9], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows == 1) {
console.log('标记删除成功')
}
})
目前有两种开发模式,一种是服务器端渲染的web开发模式,一种是前后端分离的web开发模式。
注意:现实生活中的会员卡身份认证方式,在 Web开发中的专业术语叫做Cookie
在浏览器中按F12找到cookie,可以看到是一些键值对。不同域名下的Cookie各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的Cookie一同发送到服务器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./jquery.js"></script>
</head>
<body>
<h1>首页</h1>
<button id="btnLogout">退出登录</button>
<script>
$(function () {
// 页面加载完成后,自动发起请求,获取用户姓名
$.get('/api/username', function (res) {
// status 为 0 表示获取用户名称成功;否则表示获取用户名称失败!
if (res.status !== 0) {
alert('您尚未登录,请登录后再执行此操作!')
location.href = './login.html'
} else {
alert('欢迎您:' + res.username)
}
})
// 点击按钮退出登录
$('#btnLogout').on('click', function () {
// 发起 POST 请求,退出登录
$.post('/api/logout', function (res) {
if (res.status === 0) {
// 如果 status 为 0,则表示退出成功,重新跳转到登录页面
location.href = './login.html'
}
})
})
})
</script>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./jquery.js"></script>
</head>
<body>
<!-- 登录表单 -->
<form id="form1">
<div>账号:<input type="text" name="username" /></div>
<div>密码:<input type="password" name="password" /></div>
<button>登录</button>
</form>
<script>
$(function () {
// 监听表单的提交事件
$('#form1').on('submit', function (e) {
// 阻止默认提交行为
e.preventDefault()
// 发起 POST 登录请求
$.post('/api/login', $(this).serialize(), function (res) {
// status 为 0 表示登录成功;否则表示登录失败!
if (res.status === 0) {
location.href = './index.html'
} else {
alert('登录失败!')
}
})
})
})
</script>
</body>
</html>
app.js代码
// 导入 express 模块
const express = require('express')
// 创建 express 的服务器实例
const app = express()
// TODO_01:请配置 Session 中间件
const session = require('express-session')
app.use(session({
secret: 'hahaha',//加密数据交流
resave: false, //固定写法
saveUninitialized: true //固定写法
}))
// 托管静态页面
app.use(express.static('./pages'))
// 解析 POST 提交过来的表单数据
app.use(express.urlencoded({ extended: false }))
// 登录的 API 接口
app.post('/api/login', (req, res) => {
// 判断用户提交的登录信息是否正确,账号:admin,密码:000000
if (req.body.username !== 'admin' || req.body.password !== '000000') {
return res.send({ status: 1, msg: '登录失败' })
}
// TODO_02:请将登录成功后的用户信息,保存到 Session 中
req.session.user = req.body //用户登录信息存储到session
req.session.isLoign=true //用户登录状态存储为true
res.send({ status: 0, msg: '登录成功' })
})
// 获取用户姓名的接口
app.get('/api/username', (req, res) => {
// TODO_03:请从 Session 中获取用户的名称,响应给客户端
// 判断用户是否登录
if (!req.session.isLoign) {
// 如果未登录
return res.send({status:1,message:'fail'})
}
// 如果登录了
res.send({status:0,message:'success',username:req.session.user.username})
})
// 退出登录的接口
app.post('/api/logout', (req, res) => {
// TODO_04:清空 Session 信息
req.session.destroy()
res.send({
status: 0,
msg:'退出登陆成功'
})
})
// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(80, function () {
console.log('Express server running at http://127.0.0.1:80')
})
jquery.js代码是下载的完整文件。方便在index.html中引入,使用了本地引入的方法。
然后终端输入node .\app.js
。然后运行
在浏览器打开生成的地址。
可以看到登录后,有了cookie。