node.js 基础
** 1、node是单线程的 2、node擅长高并发处 3、node擅长I/O密集型处理 **
1、nodejs 实现静态服务器
nodeJS Node.js是一个基于Chrome V8引擎(编译成原生机器码)的让JavaScript运行在服务器端的运行环境,它让JavaScript的触角伸到了服务器端。单线程 NodeJS不会为每个连接客户创造一个新的线程,仅用一个线程
2、 回顾–nodeJS特性–非阻塞式IO
io:输入输出 阻塞io:网络请求,数据库处理,文件读取
非阻塞式IO NodeJS在访问高IO操作后不会等待其完成,而是立即去执行其他代码,操作完成后会使用回调函数返回保证高效的利用当前线程 不造成硬件浪费
3、 事件驱动
事件驱动 通过事件来驱动整个程序的进行由于是单线程,所以把高io的操作就会移动到事件队列中等待完,完成后通过回调函数的方式返回给线程来进行处理。这个循环处理的过程称之为:事件环
4、
_filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径
_dirname表示当前执行脚本所在的目录
fs模块
fs文件系统用于对系统文件及目录进行读写操作
readdirSync()同步读取
同步代码在遇到错误的时候 后面的代码是不会继续进行的,所以我们可以在关键位置捕获错误信息
// 同步读取文件夹 readdirSync
try {
let t1 = fs.readdirSync("./")
console.log(t1)
} catch (error) {
console.log(error)
}
异步则不会阻塞代码的执行
异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调 语法:fs.readdir(path,options,callback(err,files)) path(必选),表示要读取的路径。 options(可选)参数。 callback 是回调函数,第一个err错误信息,data成功内容
// 异步读取文件目录
fs.readdir("./",(err,ok)=>{
if(err){
console.log("错误:"+err)
}
console.log(ok)
})
语法:fs.mkdir(path,[mode],[callback(err)])注意不能创建一个已存在的文件夹
path(必选),表示创建的目录。 mode(可选),表示创建模式。 callback 是回调函数,。err错误信息
//创建目录
fs.mkdir("./aaa",(err)=>{
if(err){
console.log(err)
}
console.log("ok")
})
语法:fs.rename(oldname,newname,callback(err))
oldname(必选),修改的文件路径。 newname(必选)新名字。 callback 是回调函数,err错误信息
// 修改名字
fs.rename("./aaa","./bbb",(err)=>{
if(err){
console.log(err)
}
console.log("ok")
})
Node删除目录 rmdir() 注意只能删除空文件夹
// 删除文件 (智能删除空文件)
fs.rmdir("./bbb",(err)=>{
if(err){
console.log(err)
}
console.log("ok")
})
filename 文件名
data 要往文件里写的内容,可以是字符串 options可选参数 encoding 编码,默认是utf8。flag写文件的模式 callback 回调方法
fs.writeFile(filename, data, [options], callback)
//异步写入
fs.writeFile("./t2.txt","德玛西亚", (err) => {
if (err) {
console.log(err)
}
console.log("ok")
})
语法:fs.readFile(“filename“,“encoding”,[callback(err,data)])
filename(必选),表示要读取的文件名。 encoding(可选),表示文件的字符编码。 callback 是回调函数,用于接收文件的内容。err错误信息,data请求内容
//异步读取
// fs.readFile("./t2.txt","utf-8", (err,data) => {
// if (err) {
// console.log(err)
// }
// console.log(data)
// })
异步删除
//异步删除
fs.unlink("./t2.txt", (err) => {
if (err) {
console.log(err)
}
console.log("删除成功")
})
解决回调地狱:promise asys/awiat 蓝鸟插件…
promise对象简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作) Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
// Promise
let pro = new Promise((resolve, reject) => {
fs.mkdir("./ccc", (err) => {
if (err) {
reject("错误" + err)
}
reject("ok")
})
})
pro.then((ok) => {
console.log(ok)
}).catch((err) => {
console.log(err);
})