今天我们进行学习Node,Node也算得上是后端了,使我们可以在服务器上得到反馈。也让我们这些前端的人接触到后端,从而做到前端后端全面开发。先看一下我们今天的学习方向
一.Node的诞生
浏览器大战和Node有何关系?
话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JS。因为JavaScript是单线程执行,根本不能进行同步IO操作,只能使用异步IO。
另一方面,因为V8是开源的高性能JavaScript引擎。Google投资去优化V8,而他只需拿来改造一下。
于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。
二.浏览器端JS和Node端JS的区别
相同点就是都使用了Javascript这门语言来开发。
浏览器端的JS,受制于浏览器提供的接口。比如浏览器提供一个弹对话框的Api,那么JS就能弹出对话框。浏览器为了安全考虑,对文件操作,网络操作,操作系统交互等功能有严格的限制,所以在浏览器端的JS功能无法强大,就像是压在五行山下的孙猴子。
NodeJs完全没有了浏览器端的限制,让Js拥有了文件操作,网络操作,进程操作等功能,和Java,Python,Php等语言已经没有什么区别了。而且由于底层使用性能超高的V8引擎来解析执行,和天然的异步IO机制,让我们编写高性能的Web服务器变得轻而易举。Node端的JS就像是被唐僧解救出来的齐天大圣一样,法力无边。
三.Node的操作 1.文件操作:读文件 fs.readFile()首先我们先要声明 fs,path,ws这些核心语法,这些都是node中内置的API。
通过 let fs=require('fs')来声明
fs.readFile(__dirname+'./yes.text',(err,data)=>{
if(err) throw err;
console.log(data);
})
这是一个读文件的操作,__dirname表示当前文件的绝对路径,我们在使用Node时,不建议使用相对路径,一般使用绝对路径。在打印的data中,我们会发现数据是一些二进制流,称之为Buffer。我们可以使用data.toString()或者在回调函数加上'utf8',即可看到我们想要的数据
2.写文件 fs.writeFile()var text = '哥哥!'
fs.writeFile('./yes.txt', text, err => {
if (err) {
console.log('文件写入失败');
return; }
console.log('文件写入成功');
})
将text写入到 ./yes.txt文件中。注意:如果没有目标文件夹,会自动新建。并且会删除原先的数据,写入新数据。fs.writeFileSync()这也是写入操作,但是是同步执行,我们一般在方法后没有Sync则代表我们使用异步操作
3.追加文件 fs.appendFile()fs.appendFile('./ok.txt', text, err => {
if (err) {
console.log('文件追加失败');
return;}
console.log('文件追加成功');
})
将text文本添加到./ok.txt中
4.拷贝文件 fs.copyFile()fs.copyFile('./yes.txt','./ok.txt',err=>{
if (err) {
console.log('文件复制失败');
return;}
console.log('文件复制成功');
})
将./yes.txt复制到./ok.txt中
五.流操作流操作一般读取的是大文件
1.读取流let fs=require(‘fs’);
const rs=fs.createReadStrem('./yes.txt',{encoding:'utf8'})
rs.on('open',()=>{
console.log(''可读流开启)
})
rs.on('data',(chunk)=>{
chunk是一个buffer,当前读取的数据片段,二进制片段流
text+=chunk
})
rs.on('end',()=>{
console.log(''可读流读取结果)
})
rs.on('close',()=>{
console.log(''可读流关闭)
})
2.写入流写入流与读取流的写法差不多,就在这里不做示例了。
六.Pathpath部分直接看图
先输出的是image.html basename是文件名+后缀
其次 c://users/86185/Desktop/csdn/canvas 绝对路径
其次.hmtl 后缀
parse是将P解析为一个对象 具体内容为:{
root: 'c:/',
dir: 'c://users/86185/Desktop/csdn/canvas',
base: 'image.html',
ext: '.html',
name: 'image'
}
最后是判断是否为绝对路径 true 返回布尔值
join可以识别 ../返回上一级
七.HTTP协议 1.完整的URL路径:协议+ip/域名+端口号+路由+?+参数信息 2.http具体操作let http=require('http') 导入核心语句
http.createServer()创建服务
listen(port)监听端口并开启服务
req请求体 res响应体
req.url路由 res.end()向前端返回内容
http.createServer((req,res)=>{})



