前端Nodejs-Day34
Node.js:基于Chrome V8引擎的 Javascript运行环境
浏览器中js的运行环境:前端运行环境
Nodejs中js的运行环境:后端运行环境(无法调用DOM和BOM等浏览器内置API)
在Node.js环境下运行JS代码:使用终端输入 node js文件路径
require方法:require 是 node 用来加载并执行其它文件导出的模块的方法。
fs文件系统模块:Nodejs提供的易于操作文件的模块,用来满足用户对文件操作的需求。
使用fs模块必须先用require语句导入!
① fs.readFile():读取指定文件内容
readFile的回调函数参数有两个为err和dataStr,成功err为报错,dataStr为文件内容。失败err为错误对象,dataStr为undefined。
//导入fs模块 操作文件
const fs = require('fs');
//调用fs.readFile方法读取文件
//参数1:文件存放路径
//参数2:读取文件的编码格式,一般是utf8
//参数3:回调函数,拿到读取失败和成功的结果:err和dataStr
fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
//失败结果
console.log(err)
//成功结果
console.log(dataStr);
});
//读取成功err为null dataStr为文件内容
//读取失败err为错误对象 dataStr为undefined
故可以通过判断err的值是否为null,若为null则失败,反之则成功。
const fs = require('fs');
fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
if (err) {
console.log('读取失败!' + err.message);
} else {
//如果err不报错则是null可以转化为布尔值即false
console.log('读取成功!' + dataStr);
}
})
② fs.writeFile():向指定文件写入内容(只能创建文件,不能创建路径!写入内容会覆盖旧内容!)
writeFile的回调函数参数只有err,若写入失败则为错误对象,成功则为null!
const fs = require('fs');
//参数1:文件存放路径
//参数2:写入内容
//参数3:回调函数
fs.writeFile('./files/2.txt', 'Hello World!', 'utf8', function (err) {
//写入成功err值为null、写入失败则为错误对象
console.log(err);
})
同样查看err是否为null可以检测是否成功写入文件:
const fs = require('fs')
fs.writeFile('./files/2.txt', 'Hello!', 'utf8', function (err) {
if (err) {
console.log('文件写入失败:' + err.message)
} else {
console.log('写入成功!')
}
})
fs模块-路径动态拼接问题:代码运行会在node命令所处的目录动态拼接出当前操作文件的完整路径,若位置错误则会引起拼接错误。
使用绝对路径解决问题·Nodejs自带的__dirname功能:__dirname代表当前文件所处的目录。
path路径模块:Nodejs提供的用来处理文件路径的模块,用来满足用户对路径处理的需求。
使用path模块也必须先用require语句导入!
① path.join():用于将多个路径片段拼接成一个完整的路径字符串。
join的参数是一系列路径判断。当出现../时会将前一位的路径抵消一位!
console.log(path.join('/a', '/b/c', '../', '/d'))
//输出\a\b\d
在路径拼接时,使用path.join方法,避免使用+字符串拼接
② path.basename(): 用于从路径字符串中将文件名解析出来。
省略第二个参数会直接将文件名及其后缀输出:
const path = require('path')
const fpath = '/a/b/c/index.html'
console.log(path.basename(fpath)) // index.html
console.log(path.basename(fpath, '.html')) // index
③ path.extname方法:用于获取路径中扩展名部分。
例子:将一个页面的html、css、js文件分离
const fs = require('fs')
const path = require('path')
const reg1 = /<style>[\s\S]*<\/style>/
const reg2 = /<script>[\s\S]*<\/script>/
fs.readFile(path.join(__dirname, 'index.html'), 'utf8', function (err, dataStr) {
if (err) return console.log(err.message)
resolveCSS(dataStr)
resolveJS(dataStr)
resolveHTML(dataStr)
})
function resolveCSS(data) {
let cssValue = data.match(reg1)[0]
cssValue = cssValue.replace('<style>', '').replace('</style>', '')
fs.writeFile(path.join(__dirname, '/index.css'), cssValue, 'utf8', err=>{
if (err) return console.log(err.message)
console.log('已写入index.css文件!')
})
}
function resolveJS(data) {
let jsValue = data.match(reg2)[0]
jsValue = jsValue.replace('<script>', '').replace('</script>', '')
fs.writeFile(path.join(__dirname, '/index.js'), jsValue, 'utf8', err => {
if (err) return console.log(err.message)
console.log('已写入index.js文件!')
})
}
function resolveHTML(data) {
let htmlValue = data.replace(data.match(reg1)[0], '<link rel="stylesheet" href="index.css">').replace(data.match(reg2)[0], '<script src="index.js"></script>')
fs.writeFile(path.join(__dirname, 'index.html'), htmlValue, 'utf8', err=>{
if (err) return console.log(err.message)
console.log('已成功改写index.html文件!')
})
}
服务器相关概念:
http模块:Nodejs提供用于创建web服务器的模块