Windows 系统环境安装 Node.js 参考:https://blog.csdn.net/longestory/article/details/108742759?utm_source=app
MacOS 系统环境安装 Node.js 参考:
https://blog.csdn.net/longestory/article/details/108742936?utm_source=app
nvm 安装和管理多版本 Node.js 参考:
https://blog.csdn.net/longestory/article/details/108743099?utm_source=app
ECMAScript(定义了语法规范)
javascript(使用 ECMAScript 语法规范,外加 Web API)
node.js(使用 ECMAScript 语法规范,外加 node.js API)
common.js
npm init -y
:初始化
debugge:调式
DNS 解析,建立 TCP 连接,发送 http 请求
server 接收到 http 请求,处理,并返回
客户端接收到返回数据,处理数据(渲染页面,执行 js)
get 请求和 querystring
post 请求和 postdata,客户端要向服务端传递数据(postman)(安装软件,可以测试请求的数据)
路由
使用 nodemon 监测文件变化,自动重启 node
使用 cross-env 设置环境变量,兼容 mac linux 和 windows
npm i nodemon cross-env --save-dev
初始化路由:根据之前技术方案的设计,做出路由
返回假数据:将路由和数据处理分离,以符合设计原则
router:处理路由
controller:处理数据
官网下载地址:
https://dev.mysql.com/downloads/mysql/
workbench
操作 mysql 的客户端,可视化操作
下载地址:workdown
CREATE DATABASE myblog
:创建一个名为 myblog 的数据库
CREATE TABLE users
:创建一个名为 users 的表
insert into users (username,password,realname) values ('haha','123456789','哈哈');
:插入
select * from users;
:查询所有
select * from users where username='haha' and realname='哈哈';
:多条件查询
select * from users where realnamelike '%哈哈%';
:模糊查询
select * from users where password like '%123%' order by id desc;
:查到的结果倒序排列
update users set
password='123' where username='wuwu';
:修改
update blogs set author='xixi' where title='标题B';
:修改 author 为 xixi
delete from users where username='haha';
:删除 username 为 haha 的数据
update users set state='0' where username='haha';
:软删除,牢记,修改 username 为 haha 的 state 为 0,
show databases;
如果遇到错误ER_NOT_SUPPORTED_AUTH_MODE
,解决方法:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
(在 mysql 中执行)
错误原因:密码的加密方式
cross-env
npm run dev
保证 server 端的安全性
mysql
模块安装:npm i mysql
核心:登录校验 & 登录信息存储
cookie
客户端 javascript 操作 cookie
server 端 node.js 操作 cookie
解决乱码:res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
cookie 的问题:暴露 username,很危险
解决:cookie 中存储 userid,server 端对应 username
session,即 server 端存储用户信息
session 的问题:目前 session 直接是 js 变量,放在 node.js 进程内存中;进程内存有限,访问量过大,内存暴增怎么解决;正式线上运行是多进程,进程之间内存无法共享
redis
将 web server 和 redis 拆分为两个单独的服务
双方都是独立的,都是可扩展的(例如都扩展成集群)
(包括 mysql,也是一个单独的服务,也可扩展)
session 适用 redis:session 访问频繁,对性能要求极高;session 可不考虑断电丢失数据的问题(内存的硬伤);session 数据量不会太大(相比于 mysql 中存储的数据)
网站信息不适用 redis:操作频率不是太高(相比于 session 操作);断电不能丢失,必须保留;数据量太大,内存成本太高
redis 安装(windows):
操作:cmd 中
redis-server.exe redis.windows.conf
:启动 redis 服务;
窗口不要关,再新开一个 cmd 窗口;redis-cli
:登录 redis
redis
模块安装:npm i redis
登录功能依赖 cookie,必须用浏览器来联调
cookie 跨域不共享的,前端和 server 端必须同域
需要用到 nginx 做代理,让前后端同域
http-server
模块安装:npm i http-server
nginx
nginx 下载:官网下载:(稳定版)
nginx 配置 很重要
系统没有日志,就等于人没有眼睛——抓瞎
第一,访问日志 access.log(server 端最重要的日志)
第二,自定义日志(包括自定义事件、错误记录等)
node.js 文件操作,node.js stream
日志功能开发和使用
日志文件拆分,日志内容分析
IO 操作的性能瓶颈
IO 包括“网络 IO”和“文件 IO”
相比于 CPU 计算和内存读写,IO 的突出特点就是:慢
如何在有限的硬件资源下提高 IO 的操作效率?stream
日志内容会慢慢积累,放在一个文件中不好处理
按时间划分日志文件,如 2020-10-21.access.log
实现方式,使用 crontab 拆分日志文件,使用 readline 分析日志内容
sql 注入:窃取数据库内容(解决:escape)
XSS 攻击:窃取前端的 cookie 内容
密码加密:保障用户信息安全(重要)
express 是 node.js 最常用的 web server 框架
如果遇到错误about_Execution_Policies
,参照