path模块+用 fs path 正则表达式 CV
http模块+加载服务器资源
注意:在es6中 __dirname __filename 要这样才能用
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log(__dirname);
console.log(__filename);
fs 文件系统模块
/*
*fs模块
*/
console.log(__dirname)// 当前文件目录
console.log(__filename)// 当前文件
// 路径拼接( __dirname+'/1.txt' 或者用:path.join(__dirname,'1.txt'))
const fs = require('fs');//导入fs模块
// err返回错误信息(成功:null)
// datastr是文件里的数据(读取失败:undefined)
// utf-8是默认编码形式(可省略)
fs.readFile(__dirname + '\\1.txt', 'utf-8', function (err, dataStr) {
if (err !== null) {
console.log(err); return;
}
console.log('文件读取成功:\n' + dataStr);
//成绩读取实例
var arrOld = dataStr.split(' ');
console.log(arrOld);
var arrNew = [];
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'));
});
console.log(arrNew)
const newStr = arrNew.join('\n');
console.log(newStr);
fs.writeFile(path.join(__dirname,'2.txt'), newStr, function (err) {
if (err !== null) {
console.log('文件写入失败'); return;
}
else{
console.log("文件写入成功")
}
});
});
path 路径模块
/*
* path模块
*/
const path = require('path');
//join 路径拼接
var pathStr = path.join('C:', '/b/c/d', '../', './e', 'f.html');
console.log(pathStr);// C:\b\c\e\f.html
// basename 获取文件名,第二个参数是隐藏拓展名(可不加)
var fullName = path.basename(pathStr, '.html');
console.log(fullName)// f.html
// extname 获取文件拓展名
var fext = path.extname(pathStr);
console.log(fext)// .html
用 fs path 正则表达式 CV
const fs = require('fs')
const path = require('path')
// 正则表达式:\s空白字符 \S非空白字符 *任意个 \转义字符
const styleStr = /<style>[\s\S]*<\/style>/
const scriptStr = /<scrpt>[\s\S]*<\/script>/
fs.readFile(path.join('1.html'), 'utf-8', function (err, dataStr) {
if (err) {
console.log('err'); return;
} else {
resolveCSS(dataStr);
//resolveJS(dataStr);
}
})
// 用于提取style标签的内容
function resolveCSS(htmlStr){
// 按照styleStr方式处理,处理了的是第一个字符串,第二个是全部
let r1 =styleStr.exec(htmlStr)
let newCSS=r1[0].replace('<style>','').replace('</style>','');//把style去掉
// console.log(r1)
console.log(newCSS)
//然后再写入文件
fs.writeFile(path.join(__dirname,'1.css'), newCSS, function (err) {
if (err) {
console.log('err'); return;
}
})
}
// 提取script标签的内容(同上)
http模块
/*
* http模块
*/
const http = require('http');
// 创建web server实例
const server = http.createServer()
// 绑定request事件,response
server.on('request', function (req, res) {
// 客户端请求的url地址(从端口号后开始)
let url=req.url
// req.method 客户端请求的method类型
let str = `你请求的地址是${req.url},and erquest methon is ${req.method}`//注意是反引号
// 为防中文乱码,需设置响应头
res.setHeader('Content-Type', 'text/html; charset=utf-8')
// 设置响应头 text/html 才能用html标签
let content;
if(url==='/'){
content='<h1>首页</h1>'
}else if(url==='/a.html'){
content='<h1>第二页</h1>'
}else{
content='<h2>404 Not Found!</h2>'
}
res.end(content)//响应请求
})
// 启动server,第一个参数为端口号
server.listen(8080, function () {
console.log('server running at http://127.0.0.1:8080')
})
加载服务器资源
const fs = require('fs')
const path = require('path')
const http = require('http')
const server = http.createServer();
server.on('request', function (req, res) {
let url = req.url;
let fpath = '';
if (url === '/') {
fpath = path.join(__dirname, '/a/默认首页.html')
} else if (url === '/b.html') {
fpath = path.join(__dirname, 'b', url)
} else {
fpath = path.join(__dirname, url)
}
fs.readFile(fpath, 'utf-8', function (err, dataStr) {
if (err) {
res.end('404 not found!')
}
else {
res.end(dataStr)
}
})
})
let duankohao = 90
server.listen(duankohao, function () {
console.log('server running at http://127.0.0.1:' + duankohao);
});
导入css,js时需要 加入到 静态资源中或者 添加router 让css,js可以通过服务访问。
我导入时发现在else{}里面拼接路径时,fpath = path.join(__dirname, url)可以导入,fpath = path.join(__dirname, ‘b’, url) 就不能导入(就算没到else里面,就只进了if()里面,默认页面也没导入css)