zoukankan      html  css  js  c++  java
  • Node.js学习笔记(2):基本模块

    Node.js学习笔记(2):基本模块

    模块

    引入模块

      为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node环境中,一个.js文件就称之为一个模块(module)。

      好处是大大提高了代码的可维护性

      其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Node内置的模块和来自第三方的模块。

      使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。

    定义一个模块

      

      在模块中输出对象,

    module.exports = variable;
    

      输出的变量可以是任意对象、数组、函数等

    调用一个模块

      

      要引入其他模块输出的对象,用

    var foo = require('other_module');
    

      引入的对象具体是什么,取决于引入模块输出的对象。

    基本模块

      因为Node.js是运行在服务区端的JavaScript环境,服务器程序和浏览器程序相比,最大的特点是没有浏览器的安全限制了,而且,服务器程序必须能接收网络请求,读写文件,处理二进制内容,所以,Node.js内置的常用模块就是为了实现基本的服务器功能。这些模块在浏览器环境中是无法被执行的,因为它们的底层代码是用C/C++在Node.js运行环境中实现的。 

    GLOBAL

      我们已经知道,在JavaScript中有且只有一个全局对象,叫做window。在Node.js同样有且只有一个全局对象,叫做global

      

    process

      process也是Node的一个对象,代表当前进程,我们可以通过它得到一些有用信息。

      

      Node.js进程本身的事件就由process对象来处理。如果我们响应exit事件,就可以在程序即将退出时执行某个回调函数:

    process.on('exit', function (code) {
        console.log('about to exit with code: ' + code);
    });
    

    fs模块

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

    异步:执行IO操作时,JavaScript代码无需等待,而是传入回调函数后,继续执行后续JavaScript代码。

    同步:同步的IO操作则需要等待函数返回,然后才能执行后续JavaScript代码。

    FS模块实例

    异步读取一个文本文件

    "use strict";
    
    var fs = require("fs");
    
    fs.readFile("content.txt","utf-8",function(err,data)
    {
        if(err)
            {console.log(err)}
        else
            {console.log(data)}
    })
    

      异步读取时,传入的这个回调函数接收两个参数,当正常读取时,err参数为nulldata参数为读取到的String。当读取发生错误时,err参数代表一个错误对象,dataundefined

      Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果

    同步读取一个文件

    "use strict";
    
    var fs = require("fs");
    var data=fs.readFileSync("content.txt","utf-8");
    console.log(data); 

    写文件

      在Visual Code中,我们把鼠标放在方法上,可以快速查看相关定义和参数,这是我们自我学习比较好的辅助工具。

    '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()的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是Buffer,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个err参数。

    获取文件信息

      如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息:

    fs.stat('context.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);
            }
        }
    });  

     运行结果如下:

    isFile: true
    isDirectory: false
    size: 16
    birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
    modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)
    
  • 相关阅读:
    Android 多线程 打地鼠游戏
    Android 线程那些事儿
    Android 服务入门
    Android+Handler+Thread 那些事儿
    Android 数据库的线程合作
    Android 数据库中的数据给到ListView
    git 修改管理
    import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包(转载)
    VC++中开发汇编语言(转)
    C struct结构体内存对齐问题
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9311342.html
Copyright © 2011-2022 走看看