文章目录
git
介绍
个人nodejs学习笔记
软件架构
node版本 v14.16.1
内置模块
使用时需要通过require引入对应的模块
1.fs模块
1.读取文件,通过readFile
读取文件
const fs = reuqire('fs')
// path:读取的文件路劲
// option:读取的文件编码格式,默认utf8
// fn: 回调函数
// err: 读取成功返回null,读取失败返回错误对象
// dataStr: 读取成功返回文件内容,失败返回undefined
fs.readFile(path[,option],function(err,dataStr){})
fs.readFile('./Files/index.html', 'utf8' ,function(err,dataStr) {
if (err) {
return console.log('文件读取失败' + err.message)
}
console.log('文件读取成功' + dataStr)
})
2.写入文件,通过writeFile
写入文件
const fs = reuqire('fs')
//path: 文件路径
//data: 写入内容
//option: 文件编码格式,默认utf8
//callback: 回调,err同读取
fs.wirteFile(path,data[,option],function(err){})
注意:写入文件时如果文件不存在会自动创建,如果文件夹不存在会报错
fs.writeFile('./Files/index.txt','123456','utf8', function(err) {
if (err) {
return console.log('文件写入失败' + err.message)
}
console.log('文件写入成功')
})
3.小练习-整理成绩
-
创建一个
成绩.txt
,内容:小红=90 小白=100 小绿=66 小黑=70 小黄=88 -
整理后生成一个
成绩-ok.txt
,内容:小红:90
小白:100
小绿:66
小黑:70
小黄:88
function clearUpResult() {
fs.readFile('./Files/成绩.txt','utf8',function(err,dataStr) {
if (err) {
fs.writeFile('./Files/成绩.txt', '小红=90 小白=100 小绿=66 小黑=70 小黄=88', function(err) {
if (err) {
return console.log('写入失败' + err.msg)
} else {
console.log('文件创建成功开始整理成绩')
clearUpResult()
}
})
} else {
const str = dataStr.split(' ').map(el => el.replace('=', ':')).join('\r\n')
fs.writeFile('./Files/成绩-ok.txt', str, function(err) {
if (err) {
return console.log('整理成绩,写入失败' + err.msg)
}
console.log('整理成绩成功' + path.join(__dirname, './Files/成绩-ok.txt'))
})
}
})
}
path内置模块处理路径
path.join(__dirname,‘xxx/xxx’) 拼接路径
path.basename(‘xxx/xxx/xxx.html’) 返回路径的文件名 xxx.html
path.extname(‘xxx/xxx/xxx.txt’) 返回路径中的扩展名 .html
__dirname指的是当前文件所在文件夹的绝对路径
4.小练习-分离html,css,js文件
目标:讲html,css,js中文件中分离成单独的css、js、html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="">
<style>
* {
margin: 0;
padding: 0;
}
html,
body {
height: 100vh;
background-color: skyblue;
}
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation: mymove 5s infinite;
-webkit-animation: mymove 5s infinite;
/*Safari and Chrome*/
}
@keyframes mymove {
from {
left: 0px;
}
to {
left: 200px;
}
}
@-webkit-keyframes mymove
/*Safari and Chrome*/
{
from {
left: 0px;
}
to {
left: 200px;
}
}
</style>
</head>
<body>
<p><strong>注释:</strong>Internet Explorer 9 以及更早的版本不支持 animation 属性。</p>
<div></div>
</body>
<script>
let i = 0
setInterval(()=> {
console.log(i++)
},1000)
</script>
</html>
const fs = reuqire('fs')
// 创建匹配style和script标签内容的正则\
// \s匹配空字符,\S匹配非空字符 *匹配多次
const reqStyle = /<style>[\s\S]*<\/style>/
const reqScript = /<script>[\s\S]*<\/script>/
// 读取目标html文件
fs.readFile(path.join(__dirname, './index.html'),'utf8', function(err,dataStr) {
if (err) {
return console.log('目标index.html文件读取失败' + err.message)
}
resloveCss(dataStr)
resloveJS(dataStr)
resloveCss(dataStr)
})
function resloveCss(htmlStr) {
//匹配style内的内容
const [r] = htmlStr.exec(reqStyle)
// 去除首尾style标签
const newStr = r.replace(/<style>|<\/style>/g,'')
// 写入index.css文件中
fs.writeFile(path.join(__dirname, './index.css'),newStr,functoin(err) {
if (err) {
return console.log('写入css文件失败' + err.message)
}
})
}
function resloveJS(htmlStr) {
//匹配style内的内容
const [r] = htmlStr.exec(reqScript)
// 去除首尾style标签
const newStr = r.replace(/<script>|<\/script>/g,'')
// 写入index.css文件中
fs.writeFile(path.join(__dirname, './index.js'),newStr,functoin(err) {
if (err) {
return console.log('写入js文件失败' + err.message)
}
})
}
function resloveHTML(htmlStr) {
//清楚style和js 写入外联link和script
const newStr = htmlStr.replace(reqStyle,'<link ref="styleheet" href="./index.css"/>')
.replace(reqScript, '<script src="./index.js"></script>')
// 写入html
fs.writeFile(path.join(__dirname, './index.html'), newStr,functoin(err) {
if (err) {
return console.log('写入html文件失败' + err.message)
}
})
}
2.http
1 . 简单搭建一个web服务
// 引入http模块
const http = require('http')
// 使用createServer创建服务
const server = http.createServer()
// 使用on 绑定请求request事件
server.on('request',(req,res) => {
console.log(req) // 请求对象,包含了与客户端的数据与属性
console.log(req.url) // 客户端的请求地址
console.log(req.methods) // 客户端的请求方式
console.log(res) // 响应对象
res.end('响应内容') // 向客户端发送指定的内容,并结束这次请求的处理过程
})
// 使用listen开启服务
server.listen(8080,() => {
console.log('服务启动了,端口号8080')
})
2. 解决中文乱码的问题
// 设置响应头编码格式
res.setHeader('Content-Type', 'text/html;charset=utf-8')
-
根据不同的url响应不同的html内容
核心实现步骤
-
获取
请求的url地址
-
设置·默认的响应内容
为404 Not found
-
判断用户请求是否为
/
或者index.html
-
判断用户是是否为
/about.html
关于页面 -
设置
Content-Type响应头
防止中文乱码 -
使用
res.end()
把内容响应给客户端
-
const http = require('http')
const server = http.createServer()
server.on('request', (req,res) => {
const url = req.url
let content = '<h1>404 Not found</h1>'
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于页面</h1>'
}
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end(content)
})
server.listen(80,() => {
console.log('服务启动成功,http://127.0.0.1')
})