nodejs-1基础

1、关于node

node.js是一个异步的事件驱动的JavaScript运行时

node.js特性:

  • 非阻塞I/O
  • 事件驱动

和前端比较:

  • 语法不变,都是ECMA语法;
  • 运行环境变了, 之前js运行在浏览器,nodejs 可以让js运行在服务端
  • 所以操作对象变了,之前js是 ECMA+webAPI,操作DOM 和BOM;nodejs是ECMA+node的api 操作的是fs,http等

2、基本调试

命令行中

mkdir node-notes
cd node-notes
code .
node nodetest.js  运行js文件

为了调试方便,使用nodemon 可以监视文件改动,自动重启,安装完后 nodemon nodetest.js 运行下文件

npm i -g nodemon
nodemon  nodetest.js

3、vscode 中 debugger

在js文件中打一个断点,然后点击左侧小爬虫标志后点击‘添加配置-nodejs’,会生成一个debugger的配置文件,点击run 后就会执行到打断点处暂停,然后单步跳出
在这里插入图片描述
也可以使用log日志,debugger是个截断的过程,只能手动调试,影响效率

4、模块导入导出

  • 引用node内置模块 - 看内存的占用率
const os = require('os');
// os 模块,可以用来看内存的占用率

const mem = os.freemem()/os.totalmem()*100
// os.freemem()  空置的时候 / totalmen()总的  = 就是内存占用率 *100  就是百分比形式
console.log(`内存占用率是${mem}%`);
  • 引用第三方模块 - 看cpu数据
    cpu 数据也可以用node的模块查看,不过比较复杂,我们可以引用一个第三方的库cpu-stat
npm init -y   #生成package.json  方便
npm i cpu-stat -S    #安装

const cpuStat = require('cpu-stat');
cpuStat.usagePercent((err,percent)=>{
    //注意:nodejs里回调一般都是第一个参数err,第二个参数success
    console.log(`cpu占用${percent}%`);   
})
  • 引用自己定义的模块
    引入自定义模块要用相对路径
const getState = require('./getState.js');

setInterval(getState,1000);
const os = require('os');
// os 模块,可以用来看内存的占用率
const cpuStat = require('cpu-stat');
//cpu 数据也可以用node的模块查看,不过比较复杂,我们可以引用一个第三方的库cpu-stat

module.exports = function getState() {
    const mem = os.freemem() / os.totalmem() * 100;
    // os.freemem()  空置的时候 / totalmen()总的  = 就是内存占用率 *100  就是百分比形式
    console.log(`内存占用率是${mem}%`);
    cpuStat.usagePercent((err, percent) => {
        //注意:nodejs里回调一般都是第一个参数err,第二个参数success
        console.log(`cpu占用${percent}%`);
    });
} 

也可以

module.exports = function() {}  //匿名形式 导出
const getState = require('./getState.js');   //导入
-------------------
module.exports = function getState() {}  //具名形式 导出
const getState = require('./getState.js');   //导入
----------------
module.exports.getState  = function() {}  //匿名形式 导出
const {getState} = require('./getState.js');   //导入
---------------
module.exports  = {
    getState() {
       //xxx
    } 
}
const {getState} = require('./getState.js');   //导入

5、fs 文件模块

  • 同步方式读文件
const fs = require('fs');
const data = fs.readFileSync('package.json');   //sync同步方式


console.log(data);

在这里插入图片描述
打印出来是buffer,读文件是以2进制的形式读出来的,可以使用buffer对象的toString()方法 转成字符串, 没有参数的话,默认使用的utf-8, toString(‘utf-8’)
在这里插入图片描述

  • 异步方式读文件
  1. 回调函数:
const fs = require('fs');

fs.readFile('./package.json',(err,data)=>{     //异步方式,回调
    console.log(data.toString());    
})
  1. 包装成promise
    node里util中的promisify方法包装下fs.readFile,使其返回的是一个promise这样就可以用then了,而不用回调函数
const fs = require('fs');

const {promisify} = require('util');    //1..nodejs 自己的util包
const  readFile = promisify(fs.readFile);   //2..包装处理fs.readFile 为promise 
readFile('./package.json').then(data=>{  //3..异步后then
    console.log(data.toString());    
})
  1. async、await
    写await 必须放在 立即执行函数中 加async的函数(async ()=>{ const data = await 异步操作})()
(async ()=>{    //1..立即执行函数中  加async的函数里
    const {promisify} = require('util');    //nodejs 自己的util包
    const  readFile = promisify(fs.readFile);   //包装处理fs.readFile 为promise 
    const data = await readFile('./package.json');    //2..异步函数前加  await
    console.log(data.toString());
})()

6、buffer

buffer 用来处理二进制数据,因为从文件系统里拿出基本都是二进制的

//分配空间
const buf1 = Buffer.alloc(10);   //分配了一个内存空间,用来存储二进制函数,10是10个字节,00 是1个字节
console.log('buf1:',buf1);
//创建
const buf2 = Buffer.from([1,2,3]);  // 进行一个二进制赋值,打印出来是01 02 03  不是123 而是二进制的123
console.log('buf2:',buf2);

const buf3 = Buffer.from('Buffer创建方法');
console.log('buf3:',buf3.toString()); //toString() 将buffer转为字符串
//写入
buf1.write('hello');   //buffer写入
console.log('buf1写入后:',buf1);
//拼接
const buf4 = Buffer.concat([buf1,buf3]);  //buffer拼接
console.log('buf4:',buf4.toString());   //还有个 buf.toJson()方法

在这里插入图片描述

7、http

  1. 简单结构
const http = require('http');  //1..引入http模块
const server = http.createServer((req,res)=>{    //2..创建一个服务器,请求服务器的时候,触发这里的函数
    const {url,method} = req;  //4..解构得到请求信息
    res.end(url);   //5..服务端返回的内容 
})
server.listen(3000);  //3..监听的端口
  1. 返回一个html文件
const http = require('http');  //1..引入http模块
const fs = require('fs');   //引入文件模块,用来读取index.html
const server = http.createServer((req,res)=>{    //2..创建一个服务器,请求服务器的时候,触发这里的函数
    const {url,method} = req;  //4..解构得到请求信息
    if(url === '/' && method === 'GET'){   //判断链接是/的话
        fs.readFile('./index.html',(err,data)=>{   //读取文件
            if(err){   //如果读文件报错
                res.writeHead('500',{'Content-Type':'text/plain'});   //500 是服务端错误, 内容类型是解释语句
                res.end('服务端错误');
                return;
            }
            //如果没有错误
            res.statusCode = 200;   //返回状态码200,表示请求成功
            res.setHeader('Content-Type','text/html');  //内容是html
            res.end(data.toString());   //返回的是读取到的数据
        })
        
    }    
})
server.listen(3000);  //3..监听的端口
发布了57 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Eva3288/article/details/105594188