nodeJs回顾记录

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时

  1. 在node_modules下的文件直接使用 require(‘nav’) 使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    node_modules下创建nav文件夹再创建nav.js
    //nav.js *** 主要使用nmp init -y 初始化 package.json文件中 "main": "nav.js" ***

    const str = 'hello world come from nav.js'
    module.exports = str

    //其他js文件
    const nav = require('nav')
    console.log(nav) //hello world come from nav.js
  2. 常用的fs模块API使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    const fs = require('fs')

    // 1. 异步读取文件
    fs.readFile('./demo.txt',function(err,fd){
    if(err){
    return console.error(err)
    }
    console.log(fd.toString())
    })

    // 2. 打开文件夹
    fs.open('./demo.txt',function(err,fd){
    if(err){
    return console.error(err)
    }
    console.log(fd)
    })

    // 3. 获取文件信息
    fs.stat('./demo.txt',function(err,fd){
    if(err){
    return console.error(err)
    }
    console.log(fd.isFile())
    })

    // 4. 写入文件
    fs.writeFile('log.js', '写入日志3', function (err) {
    if (err) {
    return console.error(err)
    }
    })

    // 5. 写入内容
    fs.appendFile('./log.js','使用appendFile写入内容\n',function(err){
    if (err) {
    return console.error(err)
    }
    console.log('写入成功')
    })

    // 6. 读取目录 把目录下面的文件和文件夹都获取到
    fs.readdir('./src',function(err,fl){
    if (err) {
    return console.error(err)
    }
    console.log(fl)
    })

    // 7. fs.rename 1.重命名 2.剪切
    fs.rename('./src/rename.js','./src/rename1.js',function(err,res){
    if (err) {
    return console.error(err)
    }
    console.log('重命名成功')
    })
    fs.rename('./src/index.html','./static/index.js',function(err,re){
    if (err) {
    return console.error(err)
    }
    console.log('剪切成功')
    })

    // 8. fs.rmdir 删除目录
    fs.rmdir('index.html', function (err, re) {
    if (err) {
    return console.error(err)
    }
    console.log('删除目录成功')
    })

    //9. fs.unlink 删除文件
    fs.unlink('index.html', function (err, re) {
    if (err) {
    return console.error(err)
    }
    console.log('删除文件成功')
    })

2.1 *** 练习(打印src下是目录的文件)***

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    //因为是异步操作,所以使用递归加匿名函数自调解决
fs.readdir('src',function(err,files){
var allFile = []
if(err){
return console.error(err)
}else{
(function a(i){
if(files.length == i){
console.log(allFile)
return false
}
fs.stat('src/'+files[i],function(err,fd){
if(fd.isDirectory()){
allFile.push(files[i])
}
a(i+1)
})
})(0)
}
})
  1. *** 读入流、写入流和管道读取 ***

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    const fs = require('fs');

    //文件读取流(就是一段段读取)
    var readStream = fs.createReadStream('demo.txt');
    var str = '';
    var count = 0;
    readStream.on('data',function(chunk){
    str += chunk;
    count++;
    })
    readStream.on('end',function(chunk){
    console.log(count)
    console.log(str)
    })

    //文件写入流
    var writeStream = fs.createWriteStream('input.txt');
    var data = '使用createWriteStream流写入文件\n'
    //也可以使用for写入
    for(var i=0;i<90;i++){
    writeStream.write(data,'utf-8');
    }
    writeStream.end(); //标记写入完成 能触发以下方法
    // 成功
    writeStream.on('finish',function(){
    console.log('写入完成')
    })
    //失败
    writeStream.on('error',function(){
    console.log('写入完成')
    })

    //读取一个文件内容写入到另一个文件中
    var readerStream = fs.createReadStream('demo.txt'); //读取文件
    var writeStream = fs.createWriteStream('input.txt'); //创建一个可写入流
    readerStream.pipe(writeStream)
    console.log('程序执行完毕')

  2. *** 写一个简单的web服务器,可以根据输入同url返回相应的文件内容 ***

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    const http = require('http');
    const fs = require('fs');
    const path = require('path');
    const mime = require('./static/model/mime');

    http.createServer(function (req, res) {
    var pathname = req.url;
    pathname == '/' ? pathname = './index.html' : "";
    //获取文件的后缀名
    let exname = path.extname(pathname)
    if (pathname != '/favicon.ico') {
    fs.readFile('static/' + pathname, function (err, fd) {
    if (err) {
    return console.error(err)
    } else {
    var mimeName = mime.getMime(exname) //使用自己写的方法返回text-html,text-css等
    res.writeHead(200, {
    "Content-Type": "mimeName;chart=utf-8"
    })
    res.end(fd)
    }
    })
    }
    }).listen(8888)
  3. 1 *** 使用回调函数解决异步问题 ***

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const fs = require('fs');
    console.log(1)
    function getMime(callback){
    fs.readFile('input.txt',function(err,fd){
    if(err){
    return console.error(err)
    }
    callback(fd)
    })
    }
    getMime(function(data){
    console.log(data.toString())
    })
  4. 2 *** 使用nodejs自带的events方法解决异步问题 ***

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    const fs = require('fs');
    const events = require('events');

    var EventEmitter = new events.EventEmitter();

    fs.readFile('input.txt', function (err, fd) {
    if (err) {
    return console.error(err)
    }
    EventEmitter.emit('to_parent', fd)
    })

    EventEmitter.on('to_parent', function (data) {
    console.log(data.toString())
    })
-------------本文结束感谢您的阅读-------------

本文标题:nodeJs回顾记录

文章作者:

发布时间:2019年11月25日 - 14:11

最后更新:2019年11月26日 - 16:07

原始链接:https://zhanghuaxiao.github.io/2019/11/25/nodeJs%E5%9B%9E%E9%A1%BE%E8%AE%B0%E5%BD%95/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。