目录
2.获取路径中的文件名:path.basename(),可以设置参数得到除去扩展名的文件名
4.我们将CSS样式利用正则表达式进行解析,然后将内容加载到文件中
1.Dom和Bom

JavaScript—DOM与BOM的区别 - HongBV - 博客园 (cnblogs.com)
2.浏览器中的JS运行环境(代码正常运行的必要环境)

3.Node.js相当于后端运行环境

注意事项:

4.Node.js可以做什么?

环境安装
1.两种版本的区别

2.查看nodejs版本

使用Node运行JS代码
1.什么是终端?

2.在Nodejs中执行JS代码
在执行文件目录下执行命令: node 文件名即可

或者shift+右键也可以(Power shell)

输入cls可清除终端
fs文件系统模块
引入模块
const fs=require('fs')

1.语法格式


2.测试
- //1.引入模块
- const fs = require('fs')
-
- //2.读取文件
- fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
- //2.1失败
- if (err == null) {
- console.log('读取文件失败!'+err.messgae);
- }
- console.log('-------');
- //2.2成功
- console.log('读取文件成功!'+dataStr)
-
- })

写入文件

- //1.引入模块
- const fs=require('fs');
-
- fs.writeFile('./files/1.txt','abcd',function(err){
-
- //2.进行判断,是否成功
- if(err){
- return console.log('文件写入成功!');
- }
-
- console.log('文件写入失败!');
- })
2.练习:考试成绩整理


- const fs = require('fs')
-
- fs.readFile('D:\学习资料文件\NodeJs\day01\files\1.txt', 'utf8', function (err, dataStr) {
- if (err) {
- return console.log('读取文件失败!' + err.message)
- }
- console.log('读取文件成功')
- const old = dataStr.split(' ')
- //数组存储分割的数据
- const arrnew = []
- old.forEach(item => {
- arrnew.push(item.replace('=', ':'))
- })
- //把数组中的每一项进行合并得到新的
- const newarr = arrnew.join('\r\n')
-
- //2.写入到文件
- fs.writeFile('D:\学习资料文件\NodeJs\day01\files\1.txt', newarr, function (err) {
- if (err) {
- return console.log('写入文件失败' + err.message)
- }
- console.log('成绩写入成功')
- })
- })
3.fs-动态路径拼接错误的原因
会发现node执行目录+相对路径=node文件操作的路径 
解决:
1.我们用绝对路径即可解决,但是需要记得双斜杠(移植性差,不利于维护)

2.console.log(__dirname):表示当前文件所处的目录,然后我们加上相对路径即可
- //1.引入模块
- const fs = require('fs')
-
- //2.读取文件
- fs.readFile(__dirname+'/files/1.txt', 'utf8', function (err, dataStr) {
- //2.1失败
- if (err == null) {
- console.log('读取文件失败!'+err.messgae);
- }
- console.log('-------');
- //2.2成功
- console.log('读取文件成功!'+dataStr)
-
- })
path路径模块

注意../会抵消前面一个
path.join('',''):将路径一个个合并

- const path=require('path')
-
- const pathStr=path.join('/a','/b/c','../','/d','e')
- console.log(pathStr)
- console.log(__dirname)

path.join()进行路径拼接,再叠加__dirname当前目录
- const path=require('path')
-
- //1.定义文件的存放路径
- const fpath='/a/b/c/index.html'
-
- const fullname=path.basename(fpath)
- console.log(fullname)
-
- var nameWithoutExt=path.basename(fpath,'.html')
- console.log(nameWithoutExt)



\s表示空白字符,\S表示非空白字符,*表示匹配任意次数
首先加载模块——>定义正则表达式——>然后读取文件——>将读取到的内容传入一个方法中,然后利用正则表达式进行过滤,最后将过滤后的内容传入到指定文件中

- const fs=require('fs')
- const { resolve } = require('path')
- const path=require('path')
-
- //1.利用正则表达式进行匹配这些标签
- const regStyle = /', '')
- console.log(newCss)
-
- //3.3将提取的样式写入的file中
- fs.writeFile(path.join(__dirname,'./clock/index.css'),newCss,function(err){
- if(err) return console.log('写入CSS样式失败!'+err.message)
- console.log('写入成功!')
- })
- }
- //4.定义处理js脚本的方法
- function resolveJS(htmlStr){
- //3.1利用正则表达式提取所需要的内容
- const r1=regScript.exec(htmlStr)
- //3.2将提取的内容进行样式上的替换
- const newJS= r1[0].replace('', '')
- console.log(newJS)
-
- //3.3将提取的样式写入的file中
- fs.writeFile(path.join(__dirname,'./clock/index.js'),newJS,function(err){
- if(err) return console.log('写入CSS样式失败!'+err.message)
- console.log('写入成功!')
- })
- }
- //5.定义处理HTML的方法:将外联样式匹配一下,然后写到index.html中
- function resolveHTML(htmlStr){
- //5.2将css和js中的样式文件替换为外联link
- const newHTML=htmlStr.replace(regStyle,'').replace(
- regScript,''
- )
- //5.3写入index.html
- fs.writeFile(path.join(__dirname,'./clock/index.html'),newHTML,function(err){
- if(err) return console.log('写入文件失败!'+err.message)
- console.log('写入HTML文件成功')
- })
-
-
- }
7.总结注意点:
路径得首先创建好

http模块

const http = require('http')


2.1IP地址相当于电话号码进行通信
2.2域名和域名服务器
类似于人的特征,然后域名相当于人的名字进行记忆
IP地址和域名的关系——>存放再域名服务器(DNS)中可以进行解析

2.3端口号

创建http模块——>createServer()创建web服务器——>创建request监听对象(server.on()绑定监听事件)——>然后调用服务器实例的listen()方法,即可启动当前的Web服务器

- //1.导入http模块
- const http = require('http')
- //2.创建web服务器实例
- const server = http.createServer()
- //3.为服务器实例绑定request事件
- server.on('request',function(req,res){
- console.log('Someone visit our web server.')
- })
-
- //4.启动服务器
- server.listen(8080,function(){
- console.log('server running at http://127.0.0.1:8080')
- })
-
3.1监听请求对象
- //1.导入http模块
- const http = require('http')
- //2.创建web服务器实例
- const server = http.createServer()
- //3.为服务器实例绑定request事件,function()触发函数,也可以是()=>{}
- server.on('request', (req) => {
- //3.1req.url是客户端的URL地址
- const url = req.url
- //3.2req.method是客户端请求的method类型
- const method = req.method
- const str = `请求的${url},请求的方法是${method}`
- console.log(str)
- })
-
- //4.启动服务器
- server.listen(8081, function () {
- console.log('server running at http://127.0.0.1:8080')
- })
-

3.2响应内容
核心:通过res.end()方法响应请求内容

- //1.导入http模块
- const http = require('http')
- //2.创建web服务器实例
- const server = http.createServer()
- //3.为服务器实例绑定request事件,function()触发函数,也可以是()=>{}
- server.on('request', (req,res) => {
- //3.1req.url是客户端的URL地址
- const url = req.url
- //3.2req.method是客户端请求的method类型
- const method = req.method
- const str = `请求的${url},请求的方法是${method}`
- console.log(str)
- //3.3服务器进行响应
- res.end(str)
- })
-
- //4.启动服务器
- server.listen(8081, function () {
- console.log('server running at http://127.0.0.1:8081')
- })
-

解决中文乱码问题
核心:设置响应头接口Content-Type即可
- const http=require('http')
- const server=http.createServer()
-
- //1.接收请求
- server.on('request',(req,res)=>{
- //1.定义一个字符串,包含中文内容
- const str=`您请求URL地址是${req.url},请求的method类型是${req.method}`
- //2.进行响应并且设置响应头防止乱码
- res.setHeader('Conntent-Type','text/html;charset=utf-8')
- res.end(str)
- })
-
- //2.服务端进行监听
- server.listen(80,()=>{
- console.log('server running at http://127.0.0.1')
- })
-

根据不同的url响应不同的html内容

根据用户请求的页面url来判断

然后设置请求头,并将res.end()进行响应

实现clock时钟的Web服务器
流程:1.首先创建Web服务器——>2.监听Web服务器的request事件——>3.启动Web服务器
关键:如何将请求的requesturl地址映射为文件的存放地址
将url和当前目录地址进行拼接

然后将映射过来的路径进行响应

- // 1.1 导入http模块
- const http=require('http')
- // 1.2 导入fs模块
- const fs=require('fs')
- // 1.3 导入path模块
- const path=require('path')
-
- // 2.1 创建web服务器
- const server=http.createServer()
- // 2.2 监听web服务器request事件
- server.on('request',(req,res)=>{
- // 3.1 获取到客户端请求的url地址
- /*
- /clock/index.html
- /clock/index.css
- /clock/index.js
- */
- const url=req.url // url:/
- // 3.2 把请求的url地址映射为具体文件的存放路径
- // const fpath=path.join(__dirname,url)
-
- // 5.1预定义空白的存放路径
- let fpath=''
- if(url==='/'){
- fpath = path.join(__dirname,'./clock/index.html')
- }else{
- /* 当用户输入的以下路径,我们在前面加一个/clock
- /index.html
- /index.css
- /index.js
- */
- fpath = path.join(__dirname,'/clock',url)
- }
-
- // 4.1 根据映射过来的文件路径读取文件的内容
- fs.readFile(fpath,'utf8',(err,dataStr)=>{
- // 4.2 读取失败,向客户端响应固定的错误消息
- if(err){
- return res.end('404 NOT FOUND')
- }
- // 4.3 读取成功,将读取成功的内容,响应给客户端
- res.end(dataStr)
- })
- })
- // 2.3 启动web服务器
- server.listen(8080,()=>{
- console.log('server running at http://127.0.0.1:8080');
- })
-