Node.js 第一节
一、浏览器中的 javaScript 运行环境
- v8 引擎负责解析和执行JavaScript 代码
- 内置API 是由运行环境提供得特俗接口,只能在所属得运行环境中被调用。
二、js + node.js 可以做后端开发
Node.js 是一个基于chrome V8引擎得JavaScript 运行环境
(V8引擎、浏览器内置API:dom bom ajax )
三、Node.js中的 JavaScript 运行环境
- 浏览器是JavaScript 的前端运行环境
- Node.js 是JavaScript 的后端运行环境
- Node.js 中无法调用DOM 和BOM 等浏览器内置API
(v8引擎、node.js内置API:fs 、path、htttp、js内置对象 querystring)
四、Node.js + 框架
- 基于 express 框架 ,可以快速构建web 应用
- 基于 electron 框架,可以构建跨平台的桌面应用
- restify 框架 ,可以快速构建api接口项目
五、终端中的快捷键
- 上箭头键 ,可以快速定位到上一次执行的命令
- tab键,能够快速补全路径
- 使用esc 键,能够快速清空当前已输入的命令
- 输入cls 命令 可以清空终端。
六、fs
1. 读取文件:readFile
const fs = require('fs');
fs.readFile('./index.text','utf8',function(error,dataStr){
console.log('error',error)
if(error){
console.log('读取文件失败',error)
}else{
console.log('读取文件成功',dataStr)
}
})
2. 写入文件:writeFile
- 只能创建文件,不能创建路径。
- 重复调用该方法,只会覆盖旧数据
const fs = require('fs')
fs.writeFile('./index2.text','会吃鱼的猫',function(error,dataString){
if(error){
console.log('写入文件失败',error)
}else{
console.log('写入文件成功',dataString)
}
})
3. 案例
const fs= require('fs')
fs.readFile('./成绩.text','utf8',function(err,dataString){
let array = dataString.split(' ')
let newArray = []
array.forEach(item =>{
newArray.push(item.replace('=',':'))
})
fs.writeFile('./成绩-ok.text',newArray.join('\r\n'),function(error,dataString1){
if(error){
console.log('写入文件失败',error)
}else{
console.log('写入文件成功',dataString1)
}
})
})
七、处理路径问题
console.log(__dirname,__filename)
- __dirname:当前文件所在目录
- __filename:当前执行的文件所在目录
八、path 路径问题
const fs = require('fs');
const path = require('path')
fs.readFile(path.join(__dirname,'./index.text'),'utf8',function(error,dataStr){
if(error){
console.log('读取文件失败',error)
}else{
console.log('读取文件成功',dataStr)
}
})
const npath = '/a/d/f/index.html'
const fullName1 = path.basename(npath)
console.log('fullName1',fullName1);//index.html
const fullName2 = path.basename(npath,'.html');//将文件后缀名去掉
console.log('fullName2',fullName2);//index
const fullName3 = path.extname(npath);//获取文件的扩展名(后缀)
console.log('fullName3',fullName3)
九、读取css样式、javascript脚本 、html
test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.content{
color: red;
}
</style>
</head>
<body>
<div class="content">你好</div>
<script>
function bb(){
console.log('你是斤斤计较')
}
bb()
</script>
</body>
</html>
const fs = require('fs');
const path = require('path')
/**
* 分析文件、读取css样式、javascript脚本 、html
*/
const regStyle = /<style>[\s\S]*<\/style>/;
const regScript = /<script>[\s\S]*<\/script>/;
fs.readFile(path.join(__dirname,'./index.html'),'utf8',function(err,dataString){
if(err){
// console.log('读取错误',err)
}else{
// console.log('读取成功',dataString)
resolveCss(dataString)
resolveScript(dataString)
resolveHtml(dataString)
}
})
// 定义处理css 样式的方法
function resolveCss(htmlStr){
let hl = regStyle.exec(htmlStr)
const newCss = hl[0].replace('<style>','').replace('</style>','')
fs.writeFile(path.join(__dirname,'./clock/index.css'),newCss,function(err){
if(err) console.log('写入样式失败',err)
console.log('写入样式成功')
})
}
// 定义处理js 脚本的方法
function resolveScript(htmlStr){
let hl = regScript.exec(htmlStr)
const newJs = hl[0].replace('<script>','').replace('</script>','')
fs.writeFile(path.join(__dirname,'./clock/index.js'),newJs,function(err){
if(err) console.log('写入脚本失败',err)
console.log('写入脚本成功')
})
}
// 定义处理html 结构的方法
function resolveHtml(htmlStr){
const newHtml = htmlStr.replace(regStyle,'<link ref="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>')
fs.writeFile(path.join(__dirname,'./clock/index.html'),newHtml,function(err){
if(err) console.log('写入html失败',err)
console.log('写入html成功')
})
}
未来的我会感谢现在努力的自己。