nodeJs学习笔记

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 快捷方式
  1. command + shift + p 输入code 可以实现在终端打开vscode, 方式: code .
    注意:此方式仅适用于MAC笔记本
7.4 nvm安装与使用(可以安装多个node版本)

苹果电脑 :

  1. https://github.com/nvm-sh/nvm
  2. 解压后,进入项目目录,运行 :sh install.sh
  3. 复制出现的export …4行提示,之后运行他们

window电脑

  1. 注意:一定要卸载已安装的 NodeJS,否则会发生冲突
  2. 打开控制面板 ,点击卸载程序,找到 Node.js,进行卸载。
  3. C:\Users\mayn\AppData\Roaming\npm
    C:\Users\mayn\AppData\Roaming\npm-cache
    删除上述的几个文件夹。
  4. 检查环境变量,删除之前引用的Nodejs或npm存在
  5. 安装访问: https://github.com/coreybutler/nvm-windows/releases
  6. 选择 : nvm-setup.zip:这是一个安装包,下载之后点击安装,选择安装目录以及node的存放目录,点击按钮(我建了一个nodejs文件夹用来存放node,当安装好之后,文件夹消失,需要手动再建)
  7. 添加配置
// 在此文件下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 检查结果

注意,用管理员权限打开终端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值