NODEJS day

NODEJS day,第1张

一、同步API和异步API

同步:在主程序执行,会阻止后续代码的执行,最终通过返回值获取结果

异步:会在一个独立的线程执行,不会阻止主程序后续代码执行,最终通过回调函数获取结果

二、文件系统模块(fs)

用于 *** 作服务器端文件、不是本地文件

1.查看文件状态

statSync(文件路径)/stat(文件的路径,回调函数)    //带Sync就是同步,不带的并且有回调函数的是异步

isFile()是否为文件

isDiretory() 是否为目录

//引入系统模块
//fs是官方提供的模块,是官方提供的模块,去自动到Node.js安装目录下寻找

const fs=require('fs')
//console.log(fs)
//假设这个文件很大,后果就是特别耗时,影响后续代码执行————同步API
var s=fs.statSync('./01_homework.js')   //s是一个对象
//回去到命令行对应的目录下去寻找文件

//console.log(s)
//查看是否为文件
console.log(s.isFile())
//查看是否为目录
console.log(s.isDirectory())
//针对耗时的 *** 作,采用异步API
//异步API会吧结果放在回调函数的参数中

fs.stat('./01_homework.js',function(err,s){
    //err失败的结果,s成功的结果
    //如果有错误就抛出错误

    if(err){
        throw err
    }

    console.log(s)
})

2.写入文件

writeFileSync(文件的路径,写入的数据)/writeFile(文件的路径,写入的数据,回调函数)

如果文件不存在,先创建文件然后写入数据

如果文件已经存在,先清空文件的内容然后再写入数据

//往1.txt中写入用户名'tao'
//如果文件不存在,系统会自动创建;存在会清空内容再写入

//同步
fs.writeFileSync('./txt','tao')

//异步

fs.writeFile('./2.txt','nan',function(err){
    //err 产生的错误
    if(err){
        throw err
    }

    //成功的结果是把数据写入,不需要第二个参数
    //只有成功的结果是一个值,才会需要第二个参数

})

3.追加写入文件

appendFileSync(文件的路径,写入的数据)/appendFile(文件的路径,写入的数据,回调函数)

如果文件不存在,先创建文件然后写入数据

如果文件已经存在,会在文件的末尾追加写入数据

使用方法与“写入文件”相似
练习:使用同步方法往3.txt写入一个值练习:使用异步方法往4.txt写入一个值

fs.appendFileSync('./3.txt','abc\n')

//加一个\n可以换行

fs.appendFile('./4.txt','def\n',function(err){
    if(err){
        throw err
    }
})
练习:创建数组,保存一组姓名,遍历数组获取每一个姓名,将姓名写入到文件stu.txt中,是用异步方法(观察文件中姓名的顺序)

var stu=['张三','李四','王五','陈六','韩七','周八']
for(var k in stu){
    fs.appendFileSync('./stu.txt',`${stu[k]}\n`) 
    console.log('写入成功')

}

var stu=['张三','李四','王五','陈六','韩七','周八']
for(var k in stu){
 fs.appendFile('./stu.txt',`${stu[k]}\n`,function(err){
    if(err){
        throw err
    }
    console.log('写入成功')
    })
}  //异步写入会使元素顺序错乱

4.读取文件

readFileSync(文件的路径)/readFile(文件的路径,回调函数)

//读取文件
var s=fs.readFileSync('./4.txt')
//格式为Buffer,用函数强制转换为字符串
console.log(s.toString())

//异步

var s=fs.readFile('./4.txt',(err,s)=>{    //箭头函数
    if(err){
        throw err
    }
    console.log(s.toString())
})

5.删除文件    unlink:取消关联

unlinkSync(文件的路径)/unlink(文件的路径,回调函数)

练习:分别使用同步和异步删除文件1.txt和2.txt

fs.unlinkSync('./1.txt')

fs.unlink('./2.txt',(err)=>{
    if(err){
        throw err
    }
})

6.拷贝文件

copyFileSync(源文件路径,目标文件路径)/copyFileSync(源文件路径,目标文件路径,回调函数)

拷贝文件,拷贝4.txt到当前目录下,并命名为5.txt
fs.copyFileSync('./4.txt','./5.txt')fs.copyFile('./4.txt','./5.txt',(err)=>{
    if(err){
        throw err
    }
})
三、文件流

流:可以把一个文件分成多段

createReadStream()  创建可读取的文件流

createWriteStream()   创建可写入的文件流

pipe()  管道,可以将读取的流添加到写入的流

on(事件名称,回调函数)   添加事件(事件是一个固定字符串,有需要去nodejs官网查),监听某一个动作,一旦监听到以后,会自动调用回调函数

利用文件流copy一个文件文件流转换过程(了解)

//引入fs模块
const fs=require('fs')
//以流的方式读取文件,分成很多段
var rs=fs.createReadStream('./1.JPG')

//创建写入的流,可以以流的方式写入文件
var ws=fs.createWriteStream('./2.JPG')
//将读取的流通过管道添加到写入的流
rs.pipe(ws)
 

//获取读取的每一段
//添加事件:监听是否有数据流入到内存
//on()用来添加事件,监听某一个动作
//'data'是固定的字符串形式,监听到数据流入内存,一旦流入会自动调用回调函数

rs.on('data',(c)=>{
    //参数c 每次读取的一段数据
    console.log(c)
})
//添加事件:监听是否读取结束
//'end'是固定的字符串,监听读取结束

rs.on('end',()=>{
    console.log('读取结束')
})
四、http协议

超文本传输协议,用于浏览器和WEB服务器之间的通信协议

WEB服务器,为前端提供所需要的资源

1.通用头信息(general)

Request URL:请求的网址,表示要请求的资源

Request Method:请求的方式,表示对资源的 *** 作方式,get获取、delete删除...

Status Code:响应的状态码   

              1**:接收到了请求,还没有结束响应

              2**:成功的响应

              3**:响应的重定向(跳转)

              4**:客户端错误

              5**:服务器端错误

2.响应头信息(response)

Location:设置要跳转的URL

Content-Type:设置响应的内容类型,可以设置utf-8

                         text/html;charset=utf-8

3.请求头信息(request)

五、http模块

可以用来创建WEB服务器的

有可能被防火墙拦截,最好关闭防火墙(在控制面板中关闭)

createServer()  创建WEB服务器

listen()  设置窗口

on('request',()=>{              通过事件监听请求(添加请求要刷新浏览器网页)   

req 请求的对象

res 响应的对象

res.statusCode=状态码  设置响应的状态码,默认是200

res.setHeader()  设置响应的头信息

res.write()  设置响应到浏览器的内容

res.end() 结束响应并发送

})

引入http模块//引入http模块
const http=require('http')
//创建WEB服务器
const app=http.createServer()
//设置端口
app.listen(3000,()=>{
    console.log('服务器启动成功')
})
使用浏览器请求服务器使用浏览器请求服务器,获取资源(网址)
协议 域名/IP地址  端口
http://localhost:3000
http:127.0.0.1:3000          //使用浏览器打开网址,两者都可以

添加事件,监听浏览器的请求

1类型:响应内容

2类型:跳转网址

//添加事件,监听浏览器的请求,一旦监听到,会自动调用回调函数
app.on('request',(req,res)=>{
    //console.log('有一个请求进来')
    //req 请求的对象
    //res 响应的对象

    /*
    //设置响应的内容类型
    res.setHeader('Content-type','text/html;charset=utf-8')
    //设置响应的浏览器的类容
    res.write('这是你的wangye')
    //结束并发送响应
    res.end()
    */
    //设置响应的状态码为302
    res.statusCode=302
    //设置要跳转的网址
    res.setHeader('Location','http://www.codeboy.com:9999/')
    //结束并发送响应
    res.end()
})

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1321028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)

保存