node
node.js是基于V8引擎开发的,负责解析和执行javaScript代码的运行环境,javaScript在浏览器环境中运行执行的是前端开发,javaScript在node.js环境中运行执行的是后端开发。node.js中无法调用DOM和BOM等浏览器内置API
Windows运行终端有两种 一种是 cmd 一种是powershell,powershell是微软在cmd基础上升级改进而来的功能比cmd更加强大。打开方式为 shift + 鼠标右键 就可以在对应文件夹中打开powershell。
终端快捷键
- 在文件夹中输入文件首字母 按Tab键会自动补全文件全称
- 使用 ↑ 键可以快速定位到上一次执行的命令
- 使用esc键能够快速清空当前已输入的命令
- 输入 cls命令 可以清空终端
fs文件系统模块
fs模块是node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
- fs.readFile()方法,用来读取指定文件中的内容
- fs.writeFile()方法,用来向指定的文件中写入内容
如果要在javaScript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它
const fs = require('fs')
1.fs.readFile()的语法格式
使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path [,options], callback)
- 参数1path:必选参数,字符串,表示文件的路径。
- 参数2:可选参数,表示以什么编码格式来读取文件,(上面是可选参数的格式用一个数组包起来)
- 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
//1.导入fs模块,来操作文件
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
//如果读取成功,则err的值为null
//如果读取失败,则err的值为错误对象,dataStr的值为undefined
console.log(err)
console.log('----------')
//打印成功的结果
console.log(dataStr)
})
2.fs.writeFile()的语法格式
使用fs.writeFile()方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file,data [,options],callback)
- 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
- 参数2:必选参数,表示要写入的内容。
- 参数3:可选参数,表示以什么格式写入文件内容。默认值为utf8
- 参数4:必选参数,文件写入完成后的回调函数。
//1.导入fs模块,来操作文件
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('读取文件失败' + err.message)
}
const arrOld = dataStr.split(' ')
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=',':'))
})
//把新数组中的每一项,进行合并,得到一个新的字符串
const newStr = arrNew.join('\r\n')
console.log(newStr)
})
3.fs处理路径问题
__dirname在js文件中表示当前文件所处的目录
path路径模块
1.什么是path路径模块
path模块是node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理。
例如:
- path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串
- path.basename()方法,用来从路径字符串中,将文件名解析出来
2.path.join()的语法格式
使用path.join()方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:
path.join([...paths])
//导入path模块
const path = require('path')
const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr)//输出 \a\b\d\e
3.path.basename()的语法格式
//导入path模块
const path = require('path')
const fpath ='/a/b/b/index.html' //文件存放路径
var fullName = path.basename(fpath)
var nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt)//输出index
path.exname()的语法获取文件扩展名
使用path.exname()方法,可以获取路径中扩展名的部分,语法格式如下
const path = require('path')
const fpath ='/a/b/b/index.html' //文件存放路径
const fext = path.exname(fpath)
console.log(fext)//输出.html
http模块
1.创建web服务器的基本步骤
- 导入http模块
- 创建web服务器实例
- 为服务器实例绑定request事件,监听客户的请求
- 启动服务器
const http = require('http')
const server = http.creatServer()
server.on('request',function(req,res){
console.log('Someone visit our web server')
})
server.listen(80,function(){
console.log('server running at http://127.0.0.1:80')
})
2.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)
})
3.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)
})
当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式:
server.on('request',(req,res) => {
//res是响应对象,它包含了与服务器相关的数据和属性,例如:
// 要发送到客户端的字符串
const str =`Your request url is ${req.url}, and request method is ${req.method}`
//为防止中文显示乱码的问题,需要设置响应头Content-Type的值为text/html; charset=utf-8
res.setHeader('Content-Type','text/html; charset=utf-8')
//res.end()方法的作用:
//向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})
4.根据不同的url响应不同的html内容
核心实现步骤
- 获取请求的url地址
- 设置默认的响应内容为404 Not found
- 判断用户请求是否是/或/index.html首页
- 判断用户请求是否为/about.html关于页面
- 设置Content-Type响应头,防止中文乱码
- 使用res.end()把内容响应给客户端
server.on('request',(req,res) => {
//1. 获取请求的url地址
const url =req.url
//2. 设置默认的响应内容为404 Not found
let content ='<h1>404 Not found</h1>'
//3. 判断用户请求是否是/或/index.html首页
if(url ==='/' || url==='/index.html'){
content = '<h1>首页</h1>'
//4. 判断用户请求是否为/about.html关于页面
} else if(url==='/about.html'){
content = '<h1>关于页面</h1>'
}
//5. 设置Content-Type响应头,防止中文乱码
res.setHeader('Content-Type','text/html; charset=utf-8')
// 6. 使用res.end()把内容响应给客户端
res.end(content)
})