node中的路径
process_cwd:工作路-执行node命令的文件夹的根路径
_dirname:当前执行文件的所在文件夹的绝对路径
filename:当前文件的绝对路径
node设置上传文件控制大小,设置
formidable: {
:{maxFileSize: 2*1024*1024}
1、长度控制通过content-length,设置返回码413
2、流式布局,将路径存入内存,文件存入磁盘
node开发和web开发的区别
对比 | web开发 | node开发 |
---|---|---|
组成 | ES规范+DOM的API | ES规范+Node的API |
稳定性 | 偶尔挂掉也只会影响一个客户端 | KPI最少停机时间 |
内存 | 客户端独占cpu和内存,稍有泄露可以不管 | 要承载很多请求,极力压榨CPU和内存 |
日志记录 | 不依赖于日志,只需要发送 | 记录,存储,分析日志,监控状态 |
安全 | 主要预防XSS攻击 | 要兼顾防御各种攻击如数据库攻击,权限验证 |
集群和服务拆分 | 不需要 | 如何兼容集群拆分,通过Redis,拆分服务器集群 |
前端开发
1、确认需求
2、UI选型
3、实现
后端开发流程
1、数据存储,数据库,数据表的字段定义
2、接口定义,参数
3、假数据进行接口测试
nodemon 热更新
安装报错socket up,查找后设置“npm config set registry http://registry.npmjs.org/”后修复
服务端
- 服务端稳定性 pm2的进程守护,自动重启
- 充分利用系统资源 pm2多进程
- 日志记录 pm2自带,将控制台日志写入文件
常用命令:pm2 + start 启动| restart 重启| stop 停止| delete 删除(不能再次启动)| info 进程服务信息,配置信息 | log 日志(分等级)| monit 占用系统资源情况,日志 - 多进程:单个进程内存受限,单进程崩溃,多核服务;redis实现多进程通信
pm2配置文件
{
"apps": {
"name": "test-pm2-config",
"script": "app.js",
"watch": true,
"ignore_watch": [
"node_modules","logs"
],
"error_file": "logs/err.log",
"out_file": "logs/out.log",
"log_date_format": "YYYY-MM-DD HH:mm:ss"
}
}
mysql常用语句
- 建表的时候要选择utf8,否则插入中文报错
use myblog;
// 插入
insert into user(username, `password`, realname) values('zhangsan', '123', '张三')
// 查询 条件 模糊查询 正序倒序
select * from users
select id, username from users
select * from users where username='zhangsan' and `password`='123'
select * from users where password like '%1%' order by id desc
insert
sql密码重置
https://www.jianshu.com/p/93210aa24539
node连接sql
1、通过process.env.NODE_NEV 配置数据库
2、通过mysql插件连接数据库
3、基于promise封装exec方法,通过mysql.query() 执行sql语句
redis
set key value // 设置
get key // 获取
keys * // 查询全部
del key // 删除
nginx
配置: location / { proxy_pass: // 静态资源}
location /api {proxy_pass: // 接口; proxy_set_header: host $Host }
日志
日志分为服务日志和自定义日志,需要日志拆分和日志分析
存储:通过stream写到文件当中,而不用mysql等数据库,日志不需要表查询,且日志的体积大,文件类型易迁移,无需环境配置,日志也不追求同步,更适合存放在文件当中在文件读写中遇到的瓶颈是IO操作,同时也有网络带宽的问题
分割:通过crontab 执行定时任务(sh脚本)
// crontab -e进入编辑模式
* 0 * * * * sh /Users/XXX/Desktop/code/node/src/utils/copy.sh
// copy.sh脚本 进行拷贝和清空源文件
cd /Users/XXX/Desktop/code/node/logs
cp access.log $(date +%Y-%m-%d).access.log
echo "" > access.log
分析: 通过readline(基于stream的操作 快速)进行逐行分析
安全
- sql注入 通过mysql.escape() 方法进行处理,对可能是sql语句的符号进行转义
- XSS攻击 通过xss模块进行转义失去js代码的作用,不具有攻击功能 < => < /> => >, 可以转化为\u003 \u00e来代替尖括号(MVC的处理方式),对于有JSON转义的可以通过添加[0xc0]来进行占位
进程
进程发展:单进程-复制进程-多线程-事件驱动(解决了内存占用和切换上下文的消耗)
集群稳定:自动重启、自杀信号、限量重启、日志监控,状态存储(redis),cluster单机集群
多进程架构:
- 进程间通信 是底层通过命名管道(Windows)进行通信,主进程在创建工作进程之前,会先创建一个IPC通道,创建工作进程的时候通过环境变量将这个IPC通道的文件描述符交给工作进程,在工作进程启动时去链接IPC通道
- node实现多进程监听同一个端口,进程端口启动后文件描述符被占用,不能共用,而node通过设置端口的SO_RESOADDR端口复用,使得端口的文件描述符为抢占式的使用方式,每一片时间只为一个进程服务
网友评论