一、node连库
1.查询功能
const mysql = require("mysql");
const db = mysql.createPool({
host: "localhost",
user: "root",
password: "root",
database: "test"
});
console.log(db);
db.query("select * from users", (err, results) => {
if (err) {
return err.message;
}
console.log(results);
});
2.增加功能
const mysql = require("mysql");
const db = mysql.createPool({
host: "localhost",
user: "root",
password: "root",
database: "test"
});
console.log(db);
let user = { username: "武伟", password: "666" };
let sql = "insert into users (id,username,password) values (NULL,?,?)";
db.query(sql, [user.username, user.password], (err, results) => {
if (err) {
return err.message;
}
console.log(results);
if (results.affectedRows == 1) {
console.log("插入成功");
}
});
3.更新语句
const mysql = require("mysql");
const db = mysql.createPool({
host: "localhost",
user: "root",
password: "root",
database: "test"
});
let user = { id: 11, username: "new武伟", password: "777" }; //要更新的数据
let sql = "update users set username=?,password=? where id=?";
db.query(sql, [user.username, user.password, user.id], (err, results) => {
if (err) {
return err.message;
}
console.log(results);
if (results.affectedRows == 1) {
console.log("更新成功");
}
});
3.删除语句
// 演示设置静态资源
// 用experss框架搭建web服务
const express = require("express"); //1、引入框架
const app = express(); //2.创建服务实例
// 设置静态资源模板
app.use(express.static("./test"));
// 可以根据不同的请求做不同的处理 请求方式、请求地址、响应数据
app.get("/product", (req, res) => {
res.send("hello");
});
// 3、启动服务
app.listen("80", () => {
console.log("服务已经启动了 127.0.0.1");
});
二、跨域和解决
1.什么是跨域
浏览器出于安全考虑要求同一个域名下的html页面可以对同一个域名下面的脚本发出请求,否则就会报下面的错误。
那么什么是跨域呢?
我们都知道一个完整的网址应该有下面几部分组成:
协议、端口、域名
其中https就是协议、80是端口号、www.test.com就是域名,这三个有任意一个不一样,就是跨域。
2.怎么解决跨域?
解决跨域常用的方法主要有两个: jsonp,但是它只能解决get请求的跨域 cors既能解决get请求也能解决post请求的跨域,推荐用这个
比如我们新建一个app.js创建本地服务器如下:
const express = require("express");
const app = express();
app.get("/article", (req, res) => {
res.send("get请求数据");
});
app.post("/add", (req, res) => {
res.send("post请求数据");
});
app.listen("3307", (req, res) => {
console.log("服务已经启动了 http://127.0.0.1:3307");
});
我们在postman测试get和post请求
- http://127.0.0.1:3307/article 选择get请求方式
- http://127.0.0.1:3307/add 选择post请求方式
但是这次我们不通过postman模拟数据进行测试了,这次我们自己写前端页面,自己发送ajax请求看能不能获取自己后端服务的数据?
我们在app.js同级目录下面新建01.html,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
用户名 <input type="text" id="username" /> 密码
<input type="password" id="password" />
<button id="btn">注册</button>
<script src="jquery-3.6.0.js"></script>
<script>
$("#btn").on("click", function() {
var $username = $("#username").val();
var $password = $("#password").val();
$.ajax({
url: "http://127.0.0.1:3307/add",
type: "post",
data: {
username: $username,
password: $password
},
success: function(res) {
console.log(res);
}
});
});
</script>
</body>
</html>
此时直接发送请求会报跨域问题,因为
01.html地址: file:///C:/Users/Administrator/Desktop/aaa/01.html
app.js地址:http://127.0.0.1:3307/add
其中协议端口都不一样。
cors是express提供的一个第三方中间件,使用步骤如下
- npm install cors 安装这个包
- const cors=require('cors') 导入这个包
- app.use(cors())注册使用这个中间件 注意在路由定义之前注册
此时再访问就能正常获取后台接口的数据了。
需要注意的是IE10+、chrome 4.0+、fireFox3.5+以上才支持cors,并不是所有的浏览器都支持用cors解决跨域。
三、身份认证
1.http无状态
http协议是无状态的,比如客户端会多次请求服务器数据,但是服务器并不会记录客户端的详细信息,这叫无状态。
那么怎么解决这个无状态性的问题呢?
银行是通过给客户发放银行卡,里面会记录客户的相关信息。 我们的服务端也是通过类似的给客户端发放卡的形式来保存客户端信息的,专业术语叫cookie.
cookie是不安全的,因为它是保存在浏览器的,容易被黑客捕获和解析。
3.session
express中要想使用session,主要操作步骤如下:
- npm install express-session 安装这个包
- const session=require("express-session") 导入 添加配置项
- app.use(session({ secret:'xx', resave:false, saveUninitialized:true }))
- req.session.xx=要保持的数据
- req.session.xx可以获取保存在session中的数据
- req.session.destroy()可以清空当前用户保存在服务器中的所有session,一般用在退出登录功能的时候