初学node
1.每个js文件视为一个模块
导出: let study = { name: 'jj', age: 18 } module.exports = study (也可直接exports = study) 导入: let study= require('./index.js')
2.文件模块
2.1.文件内容读取
let fs = require('fs') // 引入文件模块 // 读写文件也有同步和异步的借口 // 读取文件 // 1.同步 let content = fs.readFileSync('index.text', { flag: 'r', encoding: 'utf-8' }) // console.log(content) // 2.异步 // let content1 = fs.readFile('index.text', { flag: 'r', encoding: 'utf-8' }, (err, data) => { // if (err) throw err // console.log(data) // }) // 2.1promise 封装 function readFile(url) { return new Promise((resolve, reject) => { fs.readFile(url, { flag: 'r', encoding: 'utf-8' }, (err, data) => { err ? reject() : resolve(data) }) }) } readFile('index.text').then(res => { console.log(res) })
2.2.文件内容写入
let fs = require('fs') // 引入文件模块 // 1.写入 // fs.writeFile('index.text', '写入内容', { flag: 'w', encoding: 'utf-8' }, err => { // console.log(err ? 'err' : 'success') // }) // 封装一个写入和追加的方法 function writeFile(url, text, type) { // type-write/append return new Promise((resolve, reject) => { fs.writeFile(url, text, { flag: type === 'write' ? 'w' : 'a', encoding: 'utf-8' }, err => { // flag默认值 write-w read-r append-a err ? reject() : resolve() }) }) } async function write() { await writeFile('index.text', '写入内容\n') await writeFile('index.text', '追加内容\n') } write().then(res => console.log('success'))
2.3.文件删除
fs.unlink('index.text', () => console.log('success'))
2.4.读取文件目录
let fs = require('fs') // 引入文件模块 // 读取目录 fs.readdir('../day1', (err, files) => { console.log(files) }) // 删除目录 fs.rmdir(path, callback) //创建目录 fs.mkdir(path, callback)
2.5.输入输出
let readline = require('readline') // 引入 // 创建readline接口实例 let rl = readline.createInterface({ input: process.stdin, output: process.stdout }) // question方法 rl.question('what`t your name ?', answer => { console.log(answer) rl.close() }) // 监听close rl.on('close', () => process.exit()) // 结束进程
2.6.stream(文件流)
const fs = require('fs') // 1.创建写入流 const writer = fs.createWriteStream('home.txt', { flags: 'w', encoding: 'utf-8' }) // 监听打开 writer.on('open', () => { }) // 监听关闭 writer.on('close', () => { }) // 写入 writer.write('hello', (err) => { }) // 文件写入完成 writer.end(() => { }) // 2.创建读取流 const reader = fs.createReadStream('index.txt', { flags: 'r', encoding: 'utf-8' }) // 监听打开 reader.on('open', () => { }) // 监听关闭 reader.on('close', () => { }) // 监听每一次数据流入完成 reader.on('data', chunk => { console.log(chunk) }) // 3.通过管道 将读取到的流写入文件 reader.pipe(writer)
3.events(node事件)
const EventEmitter = require('events') // 引入事件模块 class MyEmitter extends EventEmitter { } // 创建事件 const myEmitter = new MyEmitter() // 注册监听事件 myEmitter.on('event', data => { console.log('触发事件1', data.name) }) myEmitter.on('event', data => { console.log('触发事件2', data.name) }) myEmitter.on('event', data => { console.log('触发事件3', data.name) }) // 触发事件 myEmitter.emit('event', { name: 'lili' })
4.path(路径模块)
const path = require('path') // 返回 path 的扩展名 const ex = path.extname('https://news.baidu.com') // .com // 将路径或路径片段的序列解析为绝对路径 const re = path.resolve(...['/目录1/目录2', './目录3']) // F:\目录1\目录2\目录3 console.log(__dirname) // 获取当前执行文件所在目录的完整目录名 console.log(__filename) // 获取当前执行文件的带有完整绝对路径的文件名 // 回一个对象,其属性表示 path 的有效元素。 尾部的目录分隔符会被忽略 const pa = path.parse('/目录1/目录2/文件.txt') // { // root: '/', // dir: '/目录1/目录2', // base: '文件.txt', // ext: '.txt', // name: '文件' // }
5.os(操作系统)
const os = require('os') const cp = os.cpus() // 返回一个对象数组,其中包含有关每个逻辑 CPU 内核的信息 const tm = os.totalmem() // 以整数的形式返回系统的内存总量(以字节为单位) const info = os.userInfo() // 返回关于当前有效用户的信息
6.url
const url = require('url') const myUrl = url.parse('https://sale.vmall.com/618.html?cid=10618') // { // protocol: 'https:', // slashes: true, // auth: null, // host: 'sale.vmall.com', // port: null, // hostname: 'sale.vmall.com', // hash: null, // search: '?cid=10618', // query: 'cid=10618', // pathname: '/618.html', // path: '/618.html?cid=10618', // href: 'https://sale.vmall.com/618.html?cid=10618' // } const yourUrl = url.resolve('http://www.baidu.com/', './you/index.html') // http://www.baidu.com/you/index.html
7.爬取数据
const axios = require('axios') const fs = require('fs') // const targetUrl = 'https://www.dytt8.net/index.htm' const targetUrl = 'https://www.1905.com/vod/?fr=vodplay_menu_vodhome' axios.get(targetUrl).then(res => { // console.log(res) // console.log(res.headers) // 解析html内容 let reg = /<div class="f20">(.*?)<ul class="fl f15 center_a rec_channel">/igs, content = reg.exec(res.data)[1], reg1 = /<a href="(.*?)" target="_blank" title="(.*?)">(.*?)><\/a>/igs, films = [] while (res = reg1.exec(content)) { films.push({ name: res[2], url: res[1] }) } store(films) // console.log(films) }) async function mkdir(path) { return new Promise((resolve, reject) => { fs.mkdir(path, () => resolve()) }) } async function write(path, text) { return new Promise((resolve, reject) => { fs.writeFile(path, text, {}, () => resolve()) }) } async function store(arr) { await mkdir('movies') arr.forEach(item => { write(`movies/${item.name}.json`, JSON.stringify(item)) }) }