nodeJs学习笔记
1.xss预防
- npm i xss --save
const xss = require('xss')
xss(xxxx)
2.处理get / post请求
const http = require('http')
const qs = require('qs')
const server = http.createServer((req, res) => {
const url = req.url
const method = req.method
const query = qs.parse(url.split('?')[1])
const path = url.split('?')[0];
//设置返回格式为 JSON
res.setHeader('Content-type', 'application/json')
//返回的数据
const resData = {
method,
url,
path,
query
}
//返回
if (method === 'GET') {
res.end(
JSON.stringify(resData)
)
}
if (method === 'POST') {
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
resData.postData = postData
res.end(
JSON.stringify(resData)
)
})
}
})
server.listen(8000)
console.log('ok')
3.使用nodeJs原生写日志
const fs = require('fs')
const path = require('path')
// 拼接目录
const fileName = path.resolve(__dirname, 'data.txt')
// 读取文件内容
fs.readFile(fileName, (err, data) => {
if (err) {
console.error(err)
return
}
// data 是二进制类型,需要转换为字符串
console.log(data.toString())
})
// 写入文件
const content = '这是新写入的内容\n'
const opt = {
flag: 'a' // 追加写入。覆盖用 'w'
}
fs.writeFile(fileName, content, opt, (err) => {
if (err) {
console.error(err)
}
})
3.1使用nodeJs原生写日志的Promise改造
const fs = require('fs').promises
const path = require('path')
// 拼接目录
const fileName = path.resolve(__dirname, 'data.txt')
// 读取文件内容
fs.readFile(fileName,{encoding:'utf8'}).then((data)=>{ console.log(data)})
// 写入文件
const content = '这是新写入的内容\n'
const opt = {
flag: 'a' , // 追加写入。覆盖用 'w'
encoding:'utf8'
}
fs.writeFile(fileName, content, opt).then((data)=>{ console.log(data)})
3.2使用stream
// 标准输入输出
// process.stdin.pipe(process.stdout)
// const http = require('http')
// const server = http.createServer((req, res) => {
// if (req.method === 'POST') {
// req.pipe(res) // 最主要
// }
// })
// server.listen(8000)
// // 复制文件
// const fs = require('fs')
// const path = require('path')
// const fileName1 = path.resolve(__dirname, 'data.txt')
// const fileName2 = path.resolve(__dirname, 'data-bak.txt')
// const readStream = fs.createReadStream(fileName1)
// const writeStream = fs.createWriteStream(fileName2)
// readStream.pipe(writeStream)
// readStream.on('data', chunk => {
// console.log(chunk.toString())
// })
// readStream.on('end', () => {
// console.log('copy done')
// })
const http = require('http')
const fs = require('fs')
const path = require('path')
const fileName1 = path.resolve(__dirname, 'data.txt')
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
const readStream = fs.createReadStream(fileName1)
readStream.pipe(res)
}
})
server.listen(8000)
3.3使用stream写日志
const fs = require('fs')
const path = require('path')
// 写日志
function writeLog(writeStream, log) {
writeStream.write(log + '\n') // 关键代码
}
// 生成 write Stream
function createWriteStream(fileName) {
const fullFileName = path.join(__dirname, '../', '../', 'logs', fileName)
const writeStream = fs.createWriteStream(fullFileName, {
flags: 'a'
})
return writeStream
}
// 写访问日志
const accessWriteStream = createWriteStream('access.log')
function access(log) {
writeLog(accessWriteStream, log)
}
module.exports = {
access
}
4.密码加密
const crypto = require('crypto')
// 密匙
const SECRET_KEY = 'wzm_8776#'
// md5 加密
function md5(content) {
let md5 = crypto.createHash('md5')
return md5.update(content).digest('hex')
}
// 加密函数
function genPassword(password) {
const str = `password=${password}&key=${SECRET_KEY}`
return md5(str)
}
module.exports = {
genPassword
}
5. PM2
- 进程守护,系统崩溃自动重启
- 启动多进程,充分利用cpu和内存
- 自带日志记录功能
- npm install pm2 -g
- pm2 --version
- pm2 list 查看当前列表
- pm2 restart id/appname 重启
- pm2 stop id/appname 停止
- pm2 delete id/appname 删除
- pm2 info id/appname 查看基本信息和相应文件的位置路径
- pm2 log id/appname 查看日志,也可以在文件中查看,pm2已经自动将console.log console.error打印存入不同文件中。
- pm2 monit id/appname 查看CPU和内存的信息
// 1.新建pm2.conf.json文件
{
"apps": {
"name": "pm2-test-server", // APPname
"script": "app.js", // 启动的文件
"watch": true, // 自动重启
"ignore_watch": [ // 不需要监听的文件
"node_modules",
"logs"
],
"instances": 4, // 多进程数 ,一个进程对应一组日志。
"error_file": "logs/err.log", // 错误日志的位置console.error
"out_file": "logs/out.log", // 自定义日志的位置console.log
"log_date_format": "YYYY-MM-DD HH:mm:ss" // 每一行的时间
}
}
// 2.修改配置命令
"prd": "cross-env NODE_ENV=production pm2 start pm2.conf.json"
6. Yarn的安装和使用
- yarn的安装 : npm install -g yarn
- 查看版本:yarn --version
- Yarn 淘宝源安装(不建议使用) :
// 全局修改(不建议使用)
yarn config set registry https://registry.npm.taobao.org -g
// 临时修改(不建议使用)
yarn add 软件名 --registry https://registry.npm.taobao.org/
// 查看 yarn 源
yarn config get registry
使用第三方软件快速修改、切换 yarn 镜像源(建议使用)
yrm (YARN registry manager) 不仅可以快速切换镜像源,还可以测试自己网络访问不同源的速度
- 安装 : npm install -g yrm
- 列出当前可用的所有镜像源 : yrm ls
- 使用淘宝镜像源 :yrm use taobao
- 测试访问速度 :yrm test taobao
yarn的常用命令:
- 初始化项目 :yarn init -y // 同npm init,执行输入信息后,会生成package.json文件
- yarn install //安装package.json里所有包,并将包及它的所有依赖项保存进yarn.lock
- 添加包:yarn add [package]@[version] -D 安装到开发环境里
- yarn run 用来执行在 package.json 中 scripts 属性下定义的脚本
- 登入/登出 :yarn login/logout
- 发布包 :yarn publish
- 更新一个依赖 : yarn upgrade
- 全局安装包 : yarn global === npm -g
7. 其他
7.1 不同环境的配置
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js",
"prd": "cross-env NODE_ENV=production nodemon ./bin/www.js"
const env = process.env.NODE_ENV // 环境参数
为什么使用多进程:操作系统会限制一个进程的最大可用内存,cpu无法充分利用多核cpu的优势。
7.2 换源
// 安装32位的electron
npm install --arch=ia32 electron@10.1.3
// 换源
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm config set registry https://registry.npm.taobao.org
-- 配置后可通过下面方式来验证是否成功
npm config get registry
// 换源为原始.
npm config set registry https://registry.npmjs.org/
npm install -g npm@latest
npm install npm@latest
7.3 快捷方式
- command + shift + p 输入code 可以实现在终端打开vscode, 方式: code .
注意:此方式仅适用于MAC笔记本
7.4 nvm安装与使用(可以安装多个node版本)
苹果电脑 :
- https://github.com/nvm-sh/nvm
- 解压后,进入项目目录,运行 :sh install.sh
- 复制出现的export …4行提示,之后运行他们
window电脑
- 注意:一定要卸载已安装的 NodeJS,否则会发生冲突
- 打开控制面板 ,点击卸载程序,找到 Node.js,进行卸载。
- C:\Users\mayn\AppData\Roaming\npm
C:\Users\mayn\AppData\Roaming\npm-cache
删除上述的几个文件夹。 - 检查环境变量,删除之前引用的Nodejs或npm存在
- 安装访问: https://github.com/coreybutler/nvm-windows/releases
- 选择 : nvm-setup.zip:这是一个安装包,下载之后点击安装,选择安装目录以及node的存放目录,点击按钮(我建了一个nodejs文件夹用来存放node,当安装好之后,文件夹消失,需要手动再建)
- 添加配置
// 在此文件下settings.txt,添加以下代码
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
常用命令:
- nvm install stable 安装最新稳定版本
- nvm version
- nvm ls
- nvm install 14.15.1
- nvm uninstall 14.15.1
- nvm use 14.15.1 切换版本
- nvm current 查看当前node版本
- node -v 检查结果
注意,用管理员权限打开终端