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
打包可压缩属性,可接受文件类型
常见状态码
最近在接项目,所以等我项目做完了再继续更新,未完待续。。。