nodeJS基础操作

nodeJS基础操作

  1. 读取内存占用率
  2. 第三方插件使用方法(git下载插件、loading插件)
  3. Promise使用方法(在第2条中有使用)
  4. 同步、异步调用文件
  5. 启动一个3000端口的本地服务
  6. 页面读取、未找到路由404页面、接口调用返回json、steam流处理图片css等(都在第5条里面实现了)
  7. 文件流
  8. 埋点 让埋点更简单 const img = new Image(); img.src = ‘/api/users?abc=123’ 下面没有更多相关内容了,第七点over。
// 1. 读取内存占用率
const os = require("os")
const men = os.freemem() / os.totalmem() *100;
console.log(`内存占用率${men.toFixed(2)}%`)

// 2. 第三方插件使用方法(git下载插件、loading插件)
// const download = require('download-git-repo');
// const ora = require('ora'); //loading效果插件
// const process = ora(`🔥下载git项目`)
// process.start()
// download('github:su37josephxia/vue-template', 'test', err => {
//     if (err) {
//         process.fail();
//     } else {
//         process.succeed();
//     }
// })

// 3. Promise使用方法(在第2条中有使用)改造上面git下载回调为promise方式,避免后期回调地狱
const repo = 'github:su37josephxia/vue-template';
const desc = '../test';
clone(repo, desc);
async function clone(repo, desc) {
    const { promisify } = require('util');
    const download = promisify(require('download-git-repo'));
    const ora = require('ora'); //loading效果插件
    const process = ora(`🔥下载git项目`)
    process.start();
    try {
        await download(repo, desc);
        console.log('成功')
        process.succeed();
    } catch(error) {
        console.log('失败',error)
        process.fail()
    }
}

// 4. 同步、异步调用文件 fs
const fs = require('fs');
// 同步调用文件 文件操作
const data = fs.readFileSync('download.js');
// console.log(data);
// 异步调用文件 文件操作
fs.readFile('./download.js', (err, data) => {
    if (err) throw err;
    // console.log('读取文件成功:',data.toString());
})
// 上面读取到的文件会以buffer格式读取,下面是buffer的基本操作
const buf1 = Buffer.alloc(10); //分配一个10字节的buffer空间
console.log(buf1); //<Buffer 00 00 00 00 00 00 00 00 00 00>

const buf2 = Buffer.from('a');
console.log(buf2); //<Buffer 61>

const buf3 = Buffer.from('中');
console.log(buf3); //<Buffer e4 b8 ad>

const buf4 = Buffer.concat([buf2, buf3]); //合并两个Buffer
console.log(buf4) //<Buffer 61 e4 b8 ad>
console.log(buf4.toString()) //a中 (Buffer格式可以通过toString()转为正常格式)

// 5. 启动一个3000端口的本地服务 启动一个3000端口的本地服务 start -------
const http = require('http');
const server = http.createServer((request, response) => {
    // console.log(getPrototypeChain(response)); ////  获取对象的原型链
    const { url, method, headers } = request;
    console.log(233333,url)
    if (url === '/' && method === 'GET') {
        console.log('333333')
        fs.readFile('../index.html', (err, data) => {
            // console.log(data.toString()) // html页面代码
            if (err) {
                response.writeHead(500, {
                    'Content-Type': 'text/plain;charset=utf-8'
                })
                response.end('500 服务器错误')
            }
            response.statusCode = 200;
            response.setHeader('Content-Type', 'text/html');
            response.end(data)
        })
    } else if (url === '/users' && method === 'GET') {
        response.writeHead(200, { 'Content-Type': 'application/json' })
        response.end(JSON.stringify({name:'Leo'}))
    } else if (method === 'GET' && headers.accept.indexOf('image/*') !== -1) {
        // console.log(url, headers)
        fs.createReadStream('../' + url).pipe(response)
    } else {
        response.statusCode = 404;
        response.setHeader('Content-Type', 'text/plain;charset=utf-8');
        response.end('404 页面没有找到')
    }
});
server.listen(3000);
//  获取对象的原型链
function getPrototypeChain(obj) {
   var result = [],
       proto = obj;
   while(proto != null) {
        proto = Object.getPrototypeOf(obj);
        if(proto != null) {
            result.push(proto);
            obj = proto;
        }
    }
    return result;
}
// 启动一个3000端口的本地服务 end -------
// 7. 文件流 文件流处理 读取activity-2.png 生成了个activity-2s.png的新文件(2个导管,文件1个字节一个字节的由rsImg 通过pipe导管 流入 wsImg,建立复制流入关系。不会占用太大内存资源)
const rsImg = fs.createReadStream('../image/activity-2.png');
const wsImg = fs.createWriteStream('../image/activity-2s.png')
rsImg.pipe(wsImg); // 建立pipe导管,让rsImg可以和wsImg建立字符复制流关系

// 问题1:fs.createReadStream('../' + url).pipe(response); 为什么pipe管道联通response
posted @ 2021-06-21 14:27  问问大将军  阅读(68)  评论(0编辑  收藏  举报