zoukankan      html  css  js  c++  java
  • 极简 Node.js 入门

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node

    本文更佳阅读体验:https://www.yuque.com/sunluyong/node/fs-api-style

    Node.js 对文件、文件夹读写操作主要靠内置的 fs 模块

    const fs = require('fs');
    

    fs 模块提供了几种不同调用风格的 API 支持文件读写,fs.stat 方法可以获取文件的基本信息,下面示例展示了不同风格 API 调用 fs.stat 方法

    callback 风格

    Node.js 默认的异步操作是 callback 风格 callback(err, returnValue)

    1. err: 如果程序处理出现异常,错误信息放在回调函数的第一个参数,如果没有错误 err 为 null
    2. returnValue:程序正常处理完成后结果放在回调函数第二个参数
    const fs = require('fs');
    
    fs.stat('.', (err, stats) => {
      if(err) {
      	// 处理错误。
      } else {
      	 // 使用 stats
      }
    });
    

    fs promise API

    fs.promises API 提供了一组和 callback 风格对应的方法,返回 Promise 对象而不使用回调,避免出现 callback 嵌套的回调地狱问题


    API 可通过 require('fs').promisesrequire('fs/promises')访问

    require('fs/promises') v14 后可用

    const fs = require('fs').promises;
    // const fs = require('fs/promises');
    
    fs.stat('.').then(stats => {
      // 使用 stats
    }).catch(error => {
      // 处理错误
    });
    

    promisify

    Node.js 使用回调风格一方面是因为性能原因,一方面是因为 Node.js 诞生的时候 Promise 规范还没有制定,在 Promise 规范制定后 Node.js 通过内置模块 util 提供的 promisify 方法可以把所有标准 callback 风格方法转成 promise 风格方法

    const util = require('util');
    const fs = require('fs');
    
    const stat = util.promisify(fs.stat);
    stat('.').then(stats => {
      // 使用 stats
    }).catch(error => {
      // 处理错误
    });
    

    同步方法

    很多时候需要读写文件后才能进行某些操作,在没有性能问题的场景可以使用 fs 提供的同步函数来降低代码复杂度
    fs 为大部分方法提供了一个同步版本,命名规则是方法名称后面添加 Sync ,比如 fs.readFile 和 fs.readFileSync,stat 方法也有对应的同步版本

    const fs = require('fs');
    try {
    	const stats = fs.statSync('.');
      // 使用 stats
    } catch(error) {
    	// 处理错误
    }
    

    stat

    上面例子简单使用过 fs.stat 方法获取文件基本信息,如果打印 stats 对象可以得到文件基本属性

    Stats {
      dev: 16777220,
      mode: 16877,
      nlink: 3,
      uid: 501,
      gid: 20,
      rdev: 0,
      blksize: 4096,
      ino: 4301278483,
      size: 96,
      blocks: 0,
      atimeMs: 1588483554315.173,
      mtimeMs: 1588483370684.5703,
      ctimeMs: 1588483370684.5703,
      birthtimeMs: 1588483342193.8625,
      atime: 2020-05-03T05:25:54.315Z,
      mtime: 2020-05-03T05:22:50.685Z,
      ctime: 2020-05-03T05:22:50.685Z,
      birthtime: 2020-05-03T05:22:22.194Z
    }
    

    stats 对象还提供了几个非常有用的属性、方法获取文件的更多信息,比较常用的有

    1. stats.isDirectory():判断文件是否是个文件夹
    2. stats.isFile():判断文件是否是普通文件
    3. stats.isSymbolicLink():判断文件是否是软链接
    4. stats.size:获取文件字节数
    const fs = require('fs');
    
    fs.stat('.', (err, stats) => {
      if(!err) {
        console.log(stats);
        console.log(stats.isFile());
        console.log(stats.size);
      }
    });
    
  • 相关阅读:
    【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
    ORACLE存储过程,循环语法和游标
    Oracle变量的定义、赋值及使用
    Oracle数据库常用语法
    Windows下将JAVA jar注册成windows服务
    Java压缩图片
    如何去除图片背景?这款一键抠图软件帮你
    远程办公,这 13 个工具比微信、QQ更好用
    java程序在windows后台执行的办法
    Usage of API documented as @since 1.6+……的解决办法
  • 原文地址:https://www.cnblogs.com/dolphinX/p/13500270.html
Copyright © 2011-2022 走看看