NodeJs
初识Node.js
JavaScript运行环境
-
V8 引擎负责解析和执行Javascript的代码
-
内置API是由运行环境提供的特殊接口,只能在所属的运行环境中被调用
Node.js简介
Node.js是一个基于Chrome V8 引擎的JavaScript运行环境
-
浏览器是JavaScript的前端运行环境
-
Node.js是JavaScript的后端运行环境
-
Node.js中无法调用DOM和BOM等浏览器内置的API
Node.js环境的安装
-
查看已安装的node.js的版本号
-
代开终端,中终端输入node -v,即可查看node.js的版本号
-
在Node.js环境中执行JavaScript代码
-
代开终端
-
输入node要执行的js文件的路径
fs文件系统模块
-
fs模块是node.js官方提供的,用来操作文件的模块
-
fs.readFile()方法,来读取指定文件中的内容
-
fs.writeFile()方法,用来指定的文件中写入内容
-
在JavaScript代码中,使用fs模块来操作文件,则需要使用如下的方式导入
const fs = require('fs')
-
fs.readFile()的语法格式
fs.readFile(path[,options],callback)
-
参数1:必选参数,字符串,表示文件的路径
-
参数2:可选参数,表示以什么编码格式来读取文件
-
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果
-
判断文件是否读取成功,判断err对象是否为null
-
-
fs.writeFile()的语法格式
fs.writeFile(file,data[,options],callback)
-
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
-
参数2:必选参数,表示要写入的内容
-
参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8
-
参数4:必选参数,文件写入完成后的回调函数
-
判断文件是否读取成功,判断err对象是否为null
-
-
fs 模块 - 路径动态拼接的问题
-
使用__dirname 表示当前文件的目录
-
path路径模块
-
path模块是node.js官方提供的,用来处理路径的模块
-
path.join()方法,用来讲多个路径片段拼接成一个完成的路径字符串
-
__dirname 表示当前文件所处的目录
-
path.basename()方法,用来从路径字符串中,将文件名解析出来
path.join([..paths])
参数:
-
...paths<String> 路径片段的序列
-
返回值<String>
path.basename(path[,ext])
参数:
-
path<String> 必选参数,表示一个路径的字符串
-
ext<String> 可选参数,表示文件扩展名
创建最基本的web服务器
步骤1 导入http模块
const http = require('http')
步骤2 创建web服务器实例
调用http.createServer() 方法,快速创建一个web服务器
const server = http.createServer()
步骤3 为服务器实例绑定request事件
// 使用服务器实例.on()方法,为服务器绑定一个request事件
server.on('request',(req,res)=>{
// 只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用事件的处理函数
console.log('Someone visit our web server');
})
步骤4 启动服务器
// 调用server.listen(端口号,cb回调)方法,即可启动web服务器
server.listen(80,()=>{
console.log('http server running at http://127.0.0.1')
})
req请求对象
只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数,访问与客户端相关的数据或属性,可以用下面的方式
server.on('request',(req)=>{
// req是请求对象,它包含了与客户端相关的数据和属性,例如
// req.url 是客户端请求的URL地址
// req.method 是客户端的method请求类型
const str = `Your request url is ${req.url},and request method is ${req.method}`
console.log(str)
})
res 响应对象
在服务器的request事件处理函数中,如果相访问与服务器相关的数据或属性,
server.on('request',(req,res)=>{
// res是响应对象,它包含了与服务器相关的数据和属性
// 要发送到客户端的字符串
const str = `Your request url is ${req.url}, and request method is ${req.method}`
// res.end() 方法的作用:
// 向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})
解决中文乱码的问题
server.on('request',(req,res)=>{
// res是响应对象,它包含了与服务器相关的数据和属性
// 要发送到客户端的字符串
const str = `您请求的url地址是 ${req.url}, 请求的method类型是 ${req.method}`
// 为了防止中文显示乱码的问题,需要设置响应头Content-Type 的值为text/html;charset=utf-8
res.setHeader('Content-Type','text/html;charset=utf-8')
// res.end() 方法的作用:
// 向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})
根据不同的url响应不同的html内容
核心实现步骤
-
获取请求的url地址
-
设置默认的响应内容为404 Not Found
-
判断用户请求的是否为/ 或 /index.html首页
-
判断用户请求的是否为/about.html关于页面
-
设置Content-Type 响应头,防止中文乱码
-
使用res.end()把内容响应给客户端
server.on('request',(req,res)=>{
const url = req.url // 1.获取请求的url地址
let content = '<h1>404 Not Found</h1>' // 2.设置默认的内容为404 Not found
if(url === '/' || url === '/index.html'){
content = '<h1>首页</h1>' // 3.用户请求的是首页
}else if(url === '/about.html'){
content = '<h1>关于页面</h1>' // 4.用户请求的是关于页面
}
res.setHeader('Content-Type','text/html;charset=utf-8') // 5.设置Content-Type 响应头 防止中文乱码
res.end(content) // 6.把内容发送给客户端
})
案例- 实现clock时钟的web服务器
实现步骤
-
导入需要的模块
-
创建基本的web服务器
-
将资源的请求url地址映射为文件的存放路径
-
读取文件内容并响应给客户端
-
优化资源的请求路径
步骤1 - 导入需要的模块
const http = require('http');
const fs = require('fs');
const path = require('path')
步骤2 - 创建基本的web服务器
const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
})
server.listen(80,()=>{
console.log('server running at http://127.0.0.1')
})
步骤3 - 将资源的请求url地址映射为文件的存放路径
// 3.1 获取客户端请求的url地址
const url = req.url
// 3.2 把请求的url地址,映射为本地文件的存放路径
cosnt fpath = path.join(__dirname,url)
步骤4 - 读取文件的内容并响应给客户端
fs.readFile(fpath,'utf8',(err,date)=>{
if(err){
return res.end('404 Not Found')
}
res.end(date)
})
步骤5 - 优化资源的请求路径
// 5.1 预定义空白的文件存放路径
let fpath = '';
if(url === ''){
fpath = path.join(__dirname,'./clock/index.html')
}else{
fpath = path.join(__dirname,'./colck',url);
}