node.js基础学习

什么是node.js

node.js是一个基于Chrome V8 引擎的javaScript运行环境.

node.js使用了一个事件驱动,非阻塞式I/O的模型,使其轻量又高效.

node.js的包管理npm,是全球最大的开源库生态系统.

node.js可以解析JS代码(因为是用在服务器端的,所以没有浏览器安全级别的限制),提供了很多系统级别的api,如:

- 文件的读写
- 进程的管理
- 网络通信

npm -包管理工具

npm使用入门

node.js常用模块介绍

URL

url.parse(urlString[,parseQueryString[,slashesDenoteHost]])

  • urlString要解析的URL字符串.
  • parseQueryString如果设为true,则返回的URL对象的query属性会是一个使用querystring模块的parse()生成的对象.如果设为false,则query会是一个未解析未解码的字符串.默认为false.
  • slashesDenoteHost 如果设为 true,则 // 之后至下一个 / 之前的字符串会解析作为 host。 例如, //foo/bar 会解析为 {host: ‘foo’, pathname: ‘/bar’} 而不是 {pathname: ‘//foo/bar’}。 默认为 false。

解析URL字符串并返回URL对象.

如果urlString不是字符串,则抛出TypeError.

如果auth属性存在但无法解码,则抛出URIError.

url.format(urlObject)

  • urlObject |一个URL对象(就像url.parse()返回的).如果是一个字符串,则通过url.parse()转换为一个对象.

url.format()方法返回一个从urlObject格式化后的URL字符串.

如果urlObject不是一个对象或字符串,则url.format()抛出TypeError.

格式化过程如下:

- 创建一个新的字符串result.
- 如果urlObject.protocol是一个字符串,则它会被原样添加到result.
- 否则,如果urlObject.protocol不是一个undefined也不是一个字符串,则抛出Error.
- 对于不是以:结束的urlObject.protocol,:会被添加到result.
    - urlObject.slashes 属性为真;
    - urlObject.protocol 以 http、 https、 ftp、 gopher 或 file 开头;
- 如果 urlObject.auth 属性的值为真,且 urlObject.host 或 urlObject.hostname 不为 undefined,则 urlObject.auth 会被添加到 result,且后面带上 @。
- 如果 urlObject.host 属性为 undefined,则:
    - 如果 urlObject.hostname 是一个字符串,则它会被添加到 result。
    - 否则,如果 urlObject.hostname 不是 undefined 也不是一个字符串,则抛出 Error。
    - 如果 urlObject.port 属性的值为真,且 urlObject.hostname 不为 undefined:
        - : 会被添加到 result。
        - urlObject.port 的值会被添加到 result。
- 否则,如果 urlObject.host 属性的值为真,则 urlObject.host 的值会被添加到 result。
- 如果 urlObject.pathname 属性是一个字符串且不是一个空字符串:
    - 如果 urlObject.pathname 不是以 / 开头,则 / 会被添加到 result。
    - urlObject.pathname 的值会被添加到 result。
- 否则,如果 urlObject.pathname 不是 undefined 也不是一个字符串,则抛出 Error。
- 如果 urlObject.search 属性为 undefined 且 urlObject.query 属性是一个 Object,则 ? 会被添加到 result,后面跟上把 urlObject.query 的值传入 querystring 模块的 stringify() 方法的调用结果。
- 否则,如果 urlObject.search 是一个字符串:
    - 如果 urlObject.search 的值不是以 ? 开头,则 ? 会被添加到 result。
    - urlObject.search 的值会被添加到 result。
- 否则,如果 urlObject.search 不是 undefined 也不是一个字符串,则抛出 Error。
- 如果 urlObject.hash 属性是一个字符串:
    - 如果 urlObject.hash 的值不是以 # 开头,则 # 会被添加到 result。
    - urlObject.hash 的值会被添加到 result。
- 否则,如果 urlObject.hash 属性不是 undefined 也不是一个字符串,则抛出 Error。
- 返回 result。

resolve(from,to)

  • from 解析时相对的基本URL.
  • to 要解析的超链接URL.

url.resolve()方法会以一种Web浏览器解析超链接的方式把一个目标URL解析成相对于一个基础URL.

例子:

const url = require('url');
url.resolve('/one/two/three','four');//'/one/two/four'
url.resolve('http://example.com/','/one');// 'http://example.com/one'
url.resolve('http://example.com/one','two');// 'http://example.com/two'

事件

events

使用事件:EventEmitter

事件的参数

只执行一个的事件监听器

实例:

使用on事件时,后面的emit方法会都执行

const EventEmitter = require('events')

class Player extends EventEmitter{}

var player = new Player();

player.on('play',(track)=>{
    console.log(`正在播放:<${track}>`)
})

player.emit('play','精绝古城')
player.emit('play','天下无双')

使用once事件时,无论有几个emit,只执行后面第一次emit

const EventEmitter = require('events')

class Player extends EventEmitter{}

var player = new Player();

player.once('play',(track)=>{
    console.log(`正在播放:<${track}>`)
})

player.emit('play','精绝古城')
player.emit('play','天下无双')

File System

得到文件与目录的信息:stat

const fs = require('fs')  //导入模块

fs.stat('spider.js',(error,stats)=>{
    if(error){
        console.log(error)
    }else{
        console.log(stats)
        console.log(`文件:${stats.isFile()}`)
        console.log(`目录:${stats.isDirectory()}`)
    }
})

创建一个目录:mkdir

const fs = require('fs')

fs.mkdir('logs',(error) =>{
    if(error){
        console.log(error)
    }else{
        console.log('成功创建目录:logs')
    }
})

创建文件并写入内容:writeFile,appendFile

const fs=require('fs')

fs.writeFile('logs/hello.log','修改~\n',(error)=>{
    if(error){
        console.log(error)
    }else{
        console.log('成功写入文件')
    }
})
fs.appendFile('logs/hello.log','hello~\n',(error)=>{
    if(error){
        console.log(error)
    }else{
        console.log('成功写入文件')
    }
})

读取文件的内容:readFile

const fs = require('fs')

fs.readFile('logs/hello.log','utf8',(error,data)=>{
    if(error){
        console.log(error);
    }else{
        console.log(data.toString());
    }
});

列出目录的东西:readdir

const fs = require('fs')

fs.readdir('logs',(error,files)=>{
    if(error){
        console.log(error);
        
    }else{
        console.log(files);
        
    }
})  

重命名目录或文件:rename

const fs = require('fs')

fs.rename('logs/hello.log','logs/greeting.log',(error)=>{
    if(error){
        console.log(error);
        
    }else{
        console.log('重命名成功');
        
    }
})

删除目录或文件:rmdir,unlink

const fs = require('fs')

fs.readdirSync('logs').map((file)=>{
    fs.unlink(`logs/${file}`,(error)=>{
        if(error){
            console.log(error)
            
        }else{
            console.log(`成功的删除了文件:${file}`)
            
        }
    })
})

fs.rmdir('logs',(error)=>{
    if(error){
        console.log(error)
        
    }else{
        console.log('成功的删除了目录:logs')
        
    }
})

Stream

读取文件流

可读流的事件

可写的文件流

pipe链式使用

pipe

const fs = require('fs')
const zlib = require('zlib')//压缩

var fileReadStream = fs.createReadStream('data.json')
var fileWriteStream = fs.createWriteStream('data.json.gz')

fireWriteStream.on('pipe',(source)=>{
    console.log(source)
})
fileReadStream
    .pipe(zlib.createGzip())
    .pipe(fileWriteStream)
// var count = 0;

// fileReadStream.once('data',(chunk)=>{
//     console.log(chunk)
    
// })
// fileReadStream.on('data',(chunk)=>{
//     console.log(`${++count}接收到:${chunk.length}`)
//     fileWriteStream.write(chunk)
// })

// fileReadStream.on('end',()=>{
//     console.log('---结束---');
    
// })
// fileReadStream.on('error',(error)=>{
//     console.log(error);
    
// })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值