Node.js 初学者指北
Node.js 初学者指北
好多年前写的笔记移动到博客上
安装
- 直接下载安装
- nvm 可实现版本管理 windows github 直接搜索nvm-windows
- mac 使用brew install npm
nvm 命令
- nvm list 查看node版本
- nvm install v10.15.0 安装指定版本
- 切换版本 nvm use –delete-prefix 10.15.0
nodejs 和js的区别
- ECMAscript 语法规范 定义语法 变量 循环 判断 并不能操作dom 鉴定click事件 不能发送ajax请求
- 不能处理http请求 不能操作文件
- js 使用ES语法规范外加Web API 缺一不可
- DOM操作BOM操作 事件绑定 ajax等
- 两者结合即可完成浏览器端的任何操作
- node js 使用ES语法规范 外加nodejs API
- 处理http 处理文件 等
页面
- 首页
- 作者主页
- 博客详情页
- 后台用户登入页
- 后台管理页, 新建博客,编辑博客
技术方案(通过需求一步一步实现方案)
- 数据如何存储
- 如何与前端对接,即接口
面试题
- http请求概述
- DNS解析,建立TCP链接,发送http请求(浏览器做的)
- TCP 三次握手
- 第一次客户端询问DNS服务器是否可用
- 第二次服务器告诉客户端可用
- 第三次 客户端收到回收收到了 即将访问http请求
- server接收到http请求处理并返回
- 客户端接收到返回数据,处理数据(如渲染页面,执行js)
nginx 反向代理解决跨域kookie不共享问题
介绍
- nginx 免费 高性能web服务器
- 一般做静态服务
- 反向代理
nginx 命令
- nginx -t 测试配置文件是否正确
- 启动 nginx; 重启 nginx - s reload
- 停止 nginx -s stop
使用
- 第三行添加 worker_processes 2(启动cpu核心数)
- 到 server listen 端口
- location /(地址) root = {}
增加代理 无需:号
- proxy_pass 代理地址
- proxy_set_header Host $host; (要把host传到服务端)
日志
- 系统没有日志, 就等于人没有眼睛 – 抓瞎
- 第一访问日志 access log (server 重要日志)
- 第二 自定义日志 (自定义事件 错误日志)
文件操作 nodejs stream(‘流’)
- 日志开发使用
- 日志文件拆分, 日志内容分析
文件操作
- 引入 fs
- 引入 path
- 日志文件 txt & log
IO操作的性能瓶颈
- IO 包括 “网络io” 和 ‘文件io’
- stream 解决
安全
- sql 注入: 窃取数据库内容 更新删除查询
- xss攻击 窃取前端的cookie内容
- 密码加密: 保障用户信息安全 (重要)
补充 通过 webserver 层面预防
- 有些攻击需要硬件和服务来支持(需要OP支持) 如 DDOS
sql 注入
- 有交互开发 就有这种攻击方式
- 攻击方式 输入一个sql片段, 最终拼接成一段攻击代码
- 如 拼接的时候注释后面的sql代码 – ;
- 预防措施: 使用 escape 函数处理输入内容即可
- escape 是 mysql 自带的函数
xss 攻击
- 攻击方式: 内容中 掺杂js代码, 以获取网页信息
- 预防方式 转换生成js的特殊字符
- 安装xss npm i xss 它是一个函数
密码加密
- 万一数据库被用户攻破, 最不应该泄露的就是用户信息
- 攻击方式: 获取用户密码,再去尝试登入其他系统
- 预防措施: 将密码加密, 即便拿到密码也不是明文
- nodejs 使用crypto 加密
pm2
- 进程守护 系统奔溃自动重启
- 启动多进程 充分利用CPU和内存
- 自带日志记录功能
pm2介绍
- 安装 npm install pm2 -g
- 版本 pm2 –version
基本使用
- 启动进程 pm2 start …(配置文件)|| app.js
- 查看进程列表 pm2 list
- 重启 pm2 restart (appNmae) || id
- 关闭 pm2 stop (appname) || id
- pm2 info 服务信息
- pm2 log
- pm2 monit 进程cpu 信息
进程守护
- 新建 pm2 配置文件 pm2.conf.json
1 | { |
- 修改 pm2 启动命令 重启
- 访问 server 检查日志文件是否生效
多进程
- 为何使用多进程
- 操作系统会限制进程最大内存
- 单个进程的内存是受限的
- 多进程和redis
- redis 解决 session 共享
- 多进程访问一个 redis
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 江宇晨的博客站!