node学习

1、node安装

 很多人学前端github项目的时候也许会遇到node版本不匹配项目的问题,这时候就需要重新下载node,但是使用node管理工具n可以避免这种问题,在n管理中自由下载node各个版本,并且可以自由切换

安装n管理node版本
sudo npm install n -g

n --version

下载稳定node版本
sudo n lts

切换版本 sudo n

2、node初体验

2.1 node运行

console.log("Hello World");

function sum(num1, num2) {
  return num1 + num2;
}

console.log(sum(20, 30));
console.log(sum(20, 30));
console.log(sum(20, 30));
console.log(sum("aaa", "bbb"));

setTimeout(() => {
  console.log("定时器被执行");
}, 1000);

使用node index.js运行

2.2 node传递参数

console.log(process.argv[2]);
console.log(process.argv[3]);



process.argv.forEach(item => {
  console.log(item);
})



3、node路径的使用

3.1 node路径拼接

resolve可以兼容window/mac/linux 的拼接,因为有的拼接是/ 有的是\\

const path = require('path');

const basePath = '/User/why';
const filename = 'abc.txt';

// const path = basePath + "/" + filename;

const filepath = path.resolve(basePath, filename);
console.log(filepath);

3.2 resolve和join路径拼接的区别

join与resole区别在于basepath="/User/why" 如果是User/why则
resole拼接结果是 当前路径+basepath+filename  
join还是User/why/abc.txt

const { log } = require('console');
const path = require('path');

// 1.获取路径信息
// const filepath='/Users/chenqichen/Documents/abc.txt'
// console.log(path.dirname(filepath));
// console.log(path.basename(filepath));
// // 获取文件后缀名
// console.log(path.extname(filepath));


// 2.join 路径 拼接
// const basepath="/User/why"
// const filename="abc.txt"

// const filepath=path.join(basepath,filename)
// console.log(filepath);


// 3.resole路径拼接 
// const basepath="/User/why"
// const filename="abc.txt"
// const othername="/chenqi.js"
// const filepath=path.resolve(basepath,filename)
// // const filepath=path.resolve(basepath,filename,othername)
// console.log(filepath);


// join与resole区别在于basepath="/User/why" 如果是User/why则
// resole拼接结果是当前路径+basepath+filename  
// join还是User/why/abc.txt



 4、Buffer的使用

4.1 字符串存储到Buffer中并读取

const message = "你好啊";

const buffer=Buffer.from(message,"utf16le")
console.log(buffer);
console.log(buffer.toString('utf16le'));

4.2 读取文件与sharp的使用

安装sharp,无中文路径下安装

npm install sharp
const fs = require('fs');
const sharp = require('sharp');

// 读取文本文件
// fs.readFile("./foo.txt", (err, data) => {
//   console.log(data);
//   console.log(data.toString());
// });

// 读取图片文件
// fs.readFile("./bar.png", (err, data) => {
//   console.log(data);

//   fs.writeFile("./foo1.png", data, err => {
//     console.log(err);
//   });
// });



// sharp库的使用
// sharp('./bar.png')
//   .resize(50, 500)
//   .toFile('./b1.png');

sharp('./foo.png')
  .resize(50, 500)
  .toBuffer()
  .then(data => {
    fs.writeFile('./bax.png', data, err => console.log(err));
    // 重写成其他文件也可
    // fs.writeFile('./b2.txt', "22", err => console.log(err));
  })

5、事件循环

5.1 简单例子1

const message = "Hello World";

console.log(message);

function sum(num1, num2) {
  return num1 + num2;
}

function foo() {
  const result = sum(20, 30);
  console.log(result);
}

setTimeout(() => {
  console.log("setTimeout");
}, 1000);

foo();

5.2 事件循环 

 

 

5.3 js面试题1

setTimeout(function () {
  console.log("set1");
  new Promise(function (resolve) {
    resolve();
  }).then(function () {
    new Promise(function (resolve) {
      resolve();
    }).then(function () {
      console.log("then4");
    });
    console.log("then2");
  });
});

new Promise(function (resolve) {
  console.log("pr1");
  resolve();
}).then(function () {
  console.log("then1");
});

setTimeout(function () {
  console.log("set2");
});

console.log(2);

queueMicrotask(() => {
  console.log("queueMicrotask1")
});

new Promise(function (resolve) {
  resolve();
}).then(function () {
  console.log("then3");
});

// pr1
// 2
// then1
// queuemicrotask1
// then3
// set1
// then2
// then4
// set2

 5.4 js面试题2

async function async1 () {
  console.log('async1 start')
  await async2();
  console.log('async1 end')
}
 
async function async2 () {
  console.log('async2')
}

console.log('script start')

setTimeout(function () {
  console.log('setTimeout')
}, 0)
 
async1();
 
new Promise (function (resolve) {
  console.log('promise1')
  resolve();
}).then (function () {
  console.log('promise2')
})

console.log('script end')


// script start
// async1 start
// async2
// promise1
// script end
// aysnc1 end
// promise2
// setToueout

5.5 node任务队列面试题

async function async1() {
  console.log('async1 start')
  await async2()
  console.log('async1 end')
}

async function async2() {
  console.log('async2')
}

console.log('script start')

setTimeout(function () {
  console.log('setTimeout0')
}, 0)

setTimeout(function () {
  console.log('setTimeout2')
}, 300)

setImmediate(() => console.log('setImmediate'));

process.nextTick(() => console.log('nextTick1'));

async1();

process.nextTick(() => console.log('nextTick2'));

new Promise(function (resolve) {
  console.log('promise1')
  resolve();
  console.log('promise2')
}).then(function () {
  console.log('promise3')
})

console.log('script end')


// script start
// async1 start
// async2
// promise1
// promise2
// script end
// nextTick1
// nextTick2
// async1 end
//  promise3
// setTimeout0
// setImmediate
// setTimeout2

5.6 node面试题2 

setTimeout(() => {
  console.log("setTimeout");
}, 0);

setImmediate(() => {
  console.log("setImmediate");
});

// 问题: setTimeout setImmediate

第一种可能是 setTimeout setImmediate 原因是:执行setTimeout的时候会有一个闭环,这个闭环如果时间是10ms  而初始化事件循环是20ms,那么就是先执行setTimeout

第二种可能是 setImmediate setTimeout 原因是:执行执行setTimeout的时候会有一个闭环,这个闭环如果时间是10ms  而初始化事件循环是5ms,初始化后,里面还没有setTimeout后续执行的事件,那么就是先执行setImmediate 

6、http模块

node热更新

npm install -g nodemon

启动

nodemon abc.js

 打包可压缩属性,可接受文件类型

 

常见状态码 

 

最近在接项目,所以等我项目做完了再继续更新,未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江河地笑

实践是检验真理的唯一标准

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值