Node.js的数据存储
nodejs连接mysql
下载:npm i mysql
配置mysql的环境1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38config/db.js
//环境参数
const env = process.env.NODE_ENV
// 配置
let MYSQL_CONF
/**
* 通过进程获取环境变量,开发和线上不同环境到配置
*/
//开发
if (env === 'dev') {
// mysql
MYSQL_CONF = {
host: '127.0.0.1',
user: 'root',
password: '',
port: '3306',
database: 'myblog'
}
}
//线上
if (env === 'production') {
// mysql
MYSQL_CONF = {
host: '127.0.0.1',
user: 'root',
password: '',
port: '3306',
database: 'myblog'
}
}
module.exports = {
MYSQL_CONF,
}
对mysql进行promise封装处理1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28mysql.js
const mysql = require('mysql');
const { MYSQL_CONF } = require('../config/db');
const con = mysql.createConnection(MYSQL_CONF)
//开始连接
con.connect()
//统一执行sql的函数
function exec(sql) {
const promise = new Promise((resolve,reject) => {
con.query(sql,(err,result) => {
if (err) {
reject(err)
return
}
resolve(result)
})
})
return promise
}
module.exports = {
exec
}
cookie和session
什么是cookie
- 存储在浏览器的一段字符串(最大5kb)
- 跨域不共享
- 格式如k1=v1,因此可以存储结构化数据
- 每次发送http请求,会将请求域的cookie一起发送给server
- server可以修改cookie并返回给浏览器
- 浏览器中也可以通过js修改cookie(有限制)
js操作cookie,浏览器中查看cookie
- Network的Request Headers
- Application
- document.cookie
serve端操作cookie,实现登录验证
- 查看cookie
- 修改cookie
- 实现登录验证
session的问题
- 进程内存有限,访问量过大,内存暴增怎么办?
- 正式线上是多进程,进程之间内存无法共享
redis
- web server最常用的缓存数据库,数据存放在内存中
- 相比于mysql,访问速度快(内存和硬盘不是一个数量级的)
- 但是成本更高,可存储的数据量更小(内存的硬伤)
1
2
3
4
5
6
7下载:brew install redis
启动:redis-server
主机域和端口:redis-cli
设置redis:set name value
获取redis:get name
查看redis:keys *
删除redis:del name
nginx反向代理
用到nginx做代理,让前后端同域
介绍
- 高性能的web服务器,开源免费
- 一般用于做静态服务,负载均衡
- 反向代理
安装配置
- Mac: brew install nginx
- Mac: /usr/local/etc/nginx/nginx.conf
- 测试配置文件格式是否正确 nginx -t
- 启动 nginx,重启 nginx -s reload
- 停止 nginx -s stop
1
2
3
4
5
6
7
8
9
10
11
12
13//打开配置文件
sudo vi /usr/local/etc/nginx/nginx.conf
//nginx反向代理的配置,本地服务
location / {
proxy_pass http://localhost:8081;
}
//nginx反向代理的配置,接口地址
location /api/ {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
}
安全
- sql注入:窃取数据库内容
- XSS攻击:窃取前端的cookie内容
- 密码加密:保障用户信息安全
