NodeJS
-
NodeJS组成
- ECMAScript 语法,功能
- Node标准库 Node官方自带的功能API
- Node第三方库 开发者在开发过程中封装的常用代码
-
浏览器JS组成
- ECMAScript 语法,功能
- DOM 操作页面元素的API
- BOM 操作浏览器功能的API
NodeJS和浏览器的js的区别
NodeJS是一个和浏览器完全不同的环境,NodeJS当初设计出来,目的就是为了写服务器的代码的,所以里面有很多功能浏览器是不具备的,同样,服务器环境下不需要的功能,Node环境下也不会有。
NodeJS标准库
fs模块
fs模块,是Node标准库中用于操作计算机上的文件的模块,提供了很多的方法,比如现在我们想从电脑上读取一个HTML文件,把内容返回给浏览器,就需要用到这个模块
语法:
举例:
// 1. 引入fs模块 , node里面几乎所有的标准库都要先引入才能使用
const fs = require('fs')
// 2. 调用readFile方法
fs.readFile('./page/index.html',(error,data)=>{
console.log(data)
})
// 1. 引入fs模块 , node里面几乎所有的标准库都要先引入才能使用
const fs = require('fs')
// 2. 调用readFile方法 , 并指定编码
fs.readFile('./page/index.html','utf-8',(error,data)=>{
console.log(data)
})
path模块
path.join
第一种方案可以使用path.join方法配合__dirname常量来实现
const path = require('path')
const dir = path.join(__dirname,'../page/index.html')
其中join的作用是把多个路径片段拼接到一起,并解决不同平台的字符兼容问题。__dirname是得到当前js文件所在目录的API
path.resolve
而第二种方案就简单得多,我们只需要给一个相对路径,就能得到一个绝对路径
const path = require('path')
const dir = path.resolve('../page/index.html')
小结:
- NodeJS里面提供了非常多的标准库(内置模块),要学会从文档中学习
- 相对路径是基于node命令执行的目录的,所以大家在执行node代码的时候要注意
- 建议在用到路径的地方使用path来得到绝对路径再使用
NodeJS服务器
服务器是一(多)台电脑,在这台电脑上面安装了一个服务器软件,让这台电脑可以为我们提供特定的服务。对于我们而言,服务器主要提供静态资源和动态数据。
注:通常我们不会把服务器电脑和服务器软件分开来说,一般说到服务器就是指两者的结合
IP :一台计算机在一个网络中的唯一地址
端口:一个软件在一台计算机上的唯一编号
小结:
- 服务器可以是指服务器电脑,也可以是指服务器软件
- web服务器主要提供静态资源和动态数据
- 请求通过ip识别服务器主机,通过端口识别服务器软件
- 服务器软件通过url识别请求的目的
- 上述内容都是由http协议规定的
使用nodejs写一个服务器
NodeJS实现一个服务器的代码
// 1. 引入http协议,node里面已经帮我们封装好了关于这部分的API
const http = require('http')
// 2. 创建一个服务器对象
const server = http.createServer()
// 3. 绑定ip和端口
server.listen(8080,'127.0.0.1')
// 4. 服务器对象监听浏览器的请求
server.on('request',(request,response)=>{
// 5. 响应数据回浏览器
response.end('<h1>hello world!!!</h1>')
})
通过上面的5行代码,我们就使用nodejs编写了一个服务器软件,只要开启起来,就能让浏览器请求,并得到返回的数据了。
中文乱码问题
http协议中规定,我们可以在响应头中返回数据解析方式和数据的编码格式。
response.setHeader('Content-Type','text/html;charset=utf-8')
response.end('<h1>你好,世界!!!</h1>')
返回静态数据
目前为止,我们已经可以实现服务器和浏览器的通信了,但是我们发现,返回的内存太过于简单了,也不像是我们平时开发的静态资源,所以我们需要用到fs模块来把我们写好的静态资源读取出来,并返回给浏览器。
const http = require('http')
// 引入fs模块
const fs = require('fs')
const server = http.createServer()
server.listen(8080,'127.0.0.1')
server.on('request',(request,response)=>{
// 读取出来指定的文件
fs.readFile('./views/index.html',(err,data)=>{
// 调用 响应回浏览器的方法把页面内容返回浏览器
response.end(data)
})
})
首先我们需要在服务器端把请求的url获取到:
server.on('request',(request,response)=>{
// 得到浏览器请求的url
console.log(request.url)
})
所以我们只需要在request事件里面判断请求的url,并读取不同的资源返回即可
server.on('request',(request,response)=>{
// 返回index.html
if(request.url === '/views/index.html'){
// fs读取index.html , response.end() 返回
}
else if (request.url === '/views/list.html'){
// fs读取list.html , response.end() 返回
}
else if (request.url === '/css/index.css'){
// fs读取index.css , response.end() 返回
}
})