nodejs学习-day01

day01

1、nodejs
1.1、nodejs特性:事件驱动、非阻塞IO模型(异步操作)
1.2、nodejs能做什么
nodejs:既不是语言,也不是框架,它是平台

  • Web服务器后台
  • 命令行工具

1.3、读写文件、获取文件信息

  • 读文件
    浏览器中js不能读取文件。node中可以
var fs = require('fs')
/*
第一个参数表示文件路径
第二个参数表示回调函数
	成功:
		data:数据
		error:null
	失败:
		data:undefined
		error:错误对象
*/
fs.readFile('文件绝对路径', function(error, data){
	//console.log(data)
	console.log(data.toString())
})
  • 写文件
var fs = require('fs')
/*
第一个参数是:文件路径
第二个参数是:文件内容
第三个参数是:回调函数
	error:成功为null
			失败为错误对象
*/
fs.writeFile('写入文件路径', '大家好啊', function(error){
	console.log("写入成功。。。")
})
  • 获取文件创建信息——stat
var fs = require('fs')

fs.stat('./data/sample.txt', function (err, stat) {
    if (err) {
        console.log(err)
    } else {
    	//是否是文件
        console.log('isFile: ' + stat.isFile());
        // 是否是目录:
        console.log('isDirectory: ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size: ' + stat.size);
            // 创建时间, Date对象:
            console.log('birth time: ' + stat.birthtime);
            // 修改时间, Date对象:
            console.log('modified time: ' + stat.mtime);
        }
    }
})
// `结果`
isFile: true
isDirectory: false
size: 287
birth time: Thu Mar 18 2021 14:29:19 GMT+0800 (中国标准时间)
modified time: Thu Mar 18 2021 14:33:03 GMT+0800 (中国标准时间)

1.4、构建服务器
node中核心模块:http

/*
node能够非常轻松的构建一个web服务器
node提供一个核心模块:http
	帮助你创建编写服务器
*/
//加载模块
var http = require('http')
//1、使用http.createServer方法创建web服务器,返回一个server实例
var server = http.createServer()
//服务器:提供服务,读数据进行服务
//2、注册、监听request请求事件
/*
当客户端请求过来时,就会触发服务器的request请求事件,
然后执行第二个参数:回调处理
	request:请求对象,可以用来获取客户端的一些请求信息,例如请求路径
	response:响应对象,可以用来给客户端发送响应消息
*/
server.on('request', function(request, response){
	console.log("收到客户端请求, 请求路径:"+request.url)
	/*
	response对象有一个方法:write可以用来给客户发送响应数据
	write可以使用多次,最后一定要是有end结束
	*/
	//response.write("hello")
	//response.end()
	//上面方式比较繁琐,不建议使用
//	res.setHeader('Content-Type', 'text/plain; charset=utf-8')
	response.end("hello nodejs")
	//rquest.url获取是端口号3000之后路径
	//更具不同请求路径发送不同请求结果
	//
	//JSON.parse('[]')====[]
	//JSON.stringify([])==='[]'
})

//3、绑定端口号,启动服务
server.listen(3000, function(){
	console.log("服务器启动成功,通过http://127.0.0.1:3000/进行访问 ")
})

★★

//解决中文输入乱码问题,正确告诉浏览器我们发送内容的编码
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end("kaishi 路径:"+req.url)
  • text/plain:普通文本
  • text/html:html格式文本
  • image/jpeg: 图片格式,不需要编码(utf-8)

每个模块(js文件)中都提供了一个对象:export
将需要被外部访问的成员通过挂载在export上

var foo
export.foo = 10

一些核心模块:(使用之前必须使用“require”加载)

  • fs 文件操作模块
  • http 网络服务构建模块
  • os 操作系统信息模块
  • path 路径处理模块

1.5 控制条件分支

等效False的有:false、undefined、null、0、NaN、空字符串("")
其它值都将被视为True
空数组[ ], 空对象{ }等效true, 与python不同

var a = '' # false, undefined, null, 0, NaN
if (a) {
	console.log('yes')
}else{
	console.log('not')
}

1.5 以流形式读写文件——Stream
data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了,没有数据可以读取了,error事件表示出错了。

//文件流读取文件内容
var rs = fs.createReadStream(dataPath, 'utf-8');

rs.on('data', function (chunk) {
    console.log('Data: \n' + chunk)
})

rs.on('end', function () {
    console.log('End')
})

rs.on('error', function (err) {
    console.log('Error: ' + err)
})

要以流的形式写入文件,只需要不断调用write()方法,最后以end()结束:

//以流形式写入文件
var ws = fs.createWriteStream('./data/sample2.txt', 'utf-8');
for (let i = 0; i < 10; i++) {
    ws.write('使用stream写入文件。。。。\n' + i);
}
ws.write('End');
//必须以end()结束
ws.end()

·pipe·
就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe。

在Node.js中,Readable流有一个pipe()方法,就是用来干这件事的。

让我们用pipe()把一个文件流和另一个文件流串起来,这样源文件的所有数据就自动写入到目标文件里了,所以,这实际上是一个复制文件的程序:


var fs = require('fs')

var dataPath = './data/sample.txt'
var savePath = './data/samples.txt'
//查看文件信息
function fstat(dataPath){
    fs.stat(dataPath, function (err, stat) {
        if (err) {
            console.log(err)
            return;
        }
        //是否是文件
        console.log('isFile: ' + stat.isFile());
        // 是否是目录:
        console.log('isDirectory: ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size: ' + stat.size);
            // 创建时间, Date对象:
            console.log('birth time: ' + stat.birthtime);
            // 修改时间, Date对象:
            console.log('modified time: ' + stat.mtime);
        }
    })
}

fstat(dataPath)
//文件流读取文件内容
async function copyFile(from, to) {
    var rs = fs.createReadStream(from);
    var ws = fs.createWriteStream(to)
    console.log('文件复制中')

    await rs.pipe(ws)
    ws.on('finish', () => {
        console.log('文件复制完成。');
        //查看写完后文件大小
        fstat(savePath)

    })
}

copyFile(dataPath, savePath).catch(e => console.log('出错了:'+e));
//fstat(savePath)


你可能感兴趣的:(nodejs,nodejs)