资讯专栏INFORMATION COLUMN

Node.js 学习笔记(三)

sorra / 1921人阅读

摘要:在浏览器中的全局对象是对象。程序是由事件驱动执行的单线程模型,也不例外。不断执行响应事件的函数,直到没有任何响应事件的函数可以执行,就退出了。方法此方法可以在下一次事件响应中执行代码。它会返回一个对象,告诉我们文件的详细信息。

global

JS在浏览器中的全局对象是window对象。在Node.js环境中,全局对象则叫global。我们可以用它来区分当前JavaScript的执行环境:

if(typeof(window)==="undefined"){
  console.log("node.js");
}else{
  console.log("browser");
}
process

process是Node.js提供的一个对象,它代表当前Node.js的进程。

JavaScript程序是由事件驱动执行的单线程模型,Node.js也不例外。Node.js不断执行响应事件的JavaScript函数,直到没有任何响应事件的函数可以执行,Node就退出了。

nextTick方法

此方法可以在下一次事件响应中执行代码。

fs模块

fs模块是Node.js的内置模块,是负责处理读写文件的。它同时提供了异步和同步方法。

异步和同步

异步是在JS执行IO操作时,无需等待执行结果,而是传入回调函数后,继续执行下面的代码,以jQuery的getJSON()为例:

$.getJSON("http://example.com/ajax",function(data){
  console.log("IO结果返回后执行……");
});
console.log("不等待IO结果直接执行后续代码‘);

而同步则是线形的,需要等待IO操作返回结果后,再执行后续代码:
var data=getJSONSync("http://example.com/ajax");

同步代码更少,但是异步在实际的用户体验更好。

异步读文件

以下是一个异步读取文本文件的实例:

‘use strict";

var fs=require("fs");

fs.readFile("sample.txt","utf-8",function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data)
    }
})

要注意的是,sample.txt必须在当前的目录之下,且文件的编码格式为utf-8。

如果我们要读取的是二进制文件呢?下面是一个读取图片的例子:

"use strict";

var fs = require("fs");

fs.readFile("sample.png", function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data);
        console.log(data.length + " bytes");
    }
});

当读取二进制文件时,不传入文件编码(如utf-8)时,data会返回一个Buffer对象。

这里提一下Buffer对象,它是Node处理二进制数据的一个接口,也是Node原生的全局对象,可以直接使用,不需要require(‘buffer’)。它的作用类似于数组。
同步读文件

同步读文件相比异步读文件,只是在readFile上加了一个sync,看下面的例子:

"use strict"

var fs=require("fs");
try{
  var data=fs.readFileSync("sample.txt","utf-8");
  console.log(data);
}
catch(err){
  //错误信息
}

如果发生错误,只能通过try...catch捕获。

写文件

通过fs.writeFile()实现。

"use strict"

var fs=require("fs");

var data="Hello Node.js!";
fs.writeFile("output.txt",data,function(err){
  if(err){
    console.log(err);
  }else{
    console.log("ok");
  }
});

和读文件相同,writeFile()也有一个同步方法writeFileSync()

"use strict";
var fs=require("fs");

var data="hello Node.js";
fs.writeFileSync("output.txtx",data);
stat

可以通过fs.stat()获取文件大小、创建时间等信息。它会返回一个stat对象,告诉我们文件的详细信息。

"use strict";

var fs=require("fs");
fs.stat("sample.txt",function(err,stat){
  if(err){
    console.log(err);
  }else{
    // 是否是文件:
        console.log("isFile: " + stat.isFile());
        // 是否是目录:
        console.log("isDirectory: " + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log("size: " + stat.size);
            // 创建时间, Date对象:
            console.log("birth time: " + stat.birthtime);
            // 修改时间, Date对象:
            console.log("modified time: " + stat.mtime);
        }
    }
});

同样,它也有一个同步函数statSync()

"use strict";

var fs=require("fs");
var stats=fs.statSync("sample.txt");

console.log(stats.isFile());     //true

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110124.html

相关文章

  • Laravel学习笔记-前端工作流

    摘要:本节将学习是如何利用形成一套完整的前端工作流模式的。你也可以使用下面命令来强制安装所有模块,不管该模块之前是否安装过由于国内墙的原因,使用安装会非常缓慢,慢到想切,不过还好,我们可以使用淘宝提供的国内镜像进行下载。 本节将学习 Laravel 是如何利用 Sass, NPM, Gulp形成一套完整的前端工作流模式的。 一、句法强大的样式表Sass Sass 是一种可用于编写CSS的语言...

    liuchengxu 评论0 收藏0
  • Vue学习笔记之vue-cli项目搭建及解析

    摘要:样式通过标签包裹,默认是影响全局的,如需定义作用域只在该组件下起作用,需在标签上加,如要引入外部文件,首先需给项目安装依赖包,打开,进入项目目录,输入回车。 showImg(https://segmentfault.com/img/remote/1460000013235090); (一)安装node.js 首先需要安装node环境,可以直接到中文官网http://nodejs.cn/...

    Caizhenhao 评论0 收藏0
  • AI开发书籍分享

    摘要:编程书籍的整理和收集最近一直在学习深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后也找了很多的书和文章,随着不断的学习,也整理了下自己的学习笔记准备分享出来给大家后续的文章和总结会继续分享,先分享一部分的 编程书籍的整理和收集 最近一直在学习deep learning深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后...

    huayeluoliuhen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<