zoukankan      html  css  js  c++  java
  • 初学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', '写入内容
    ')
        await writeFile('index.text', '追加内容
    ')
    }
    
    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))
        })
    }
  • 相关阅读:
    Shell编程之数值运算(二) Theletter
    Shell编程检测某个服务是否运行实例 Theletter
    Shell编程之条件测试与比较(详解) Theletter
    eclipse中svn提交时报Previous operation has not finished; run 'cleanup' if it was interrupted错误的解决方法
    Jsp连接打印机
    Jsp中table导出到excel
    java创建图片验证码
    java利用映射表名称反射创建实体类并赋属性值
    基于方法的LINQ语句
    opencv中cvCreateImage大图片时出错
  • 原文地址:https://www.cnblogs.com/qxp140605/p/13121556.html
Copyright © 2011-2022 走看看