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

模块

引入模块

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

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

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

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

定义一个模块

  

  在模块中输出对象,

  1. module.exports = variable;

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

调用一个模块

  

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

  1. 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事件,就可以在程序即将退出时执行某个回调函数:

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

fs模块

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

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

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

FS模块实例

异步读取一个文本文件

  1. "use strict";
  2.  
  3. var fs = require("fs");
  4.  
  5. fs.readFile("content.txt","utf-8",function(err,data)
  6. {
  7. if(err)
  8. {console.log(err)}
  9. else
  10. {console.log(data)}
  11. })

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

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

同步读取一个文件

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

写文件

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

  1. 'use strict';
  2.  
  3. var fs = require('fs');
  4.  
  5. var data = 'Hello, Node.js';
  6. fs.writeFile('output.txt', data, function (err) {
  7. if (err) {
  8. console.log(err);
  9. } else {
  10. console.log('ok.');
  11. }
  12. });

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

获取文件信息

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

  1. fs.stat('context.txt', function (err, stat) {
  2. if (err) {
  3. console.log(err);
  4. } else {
  5. // 是否是文件:
  6. console.log('isFile: ' + stat.isFile());
  7. // 是否是目录:
  8. console.log('isDirectory: ' + stat.isDirectory());
  9. if (stat.isFile()) {
  10. // 文件大小:
  11. console.log('size: ' + stat.size);
  12. // 创建时间, Date对象:
  13. console.log('birth time: ' + stat.birthtime);
  14. // 修改时间, Date对象:
  15. console.log('modified time: ' + stat.mtime);
  16. }
  17. }
  18. });  

运行结果如下:

  1. isFile: true
  2. isDirectory: false
  3. size: 16
  4. birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
  5. modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)

Node.js学习笔记(2):基本模块的更多相关文章

  1. Node.js学习笔记(一) --- HTTP 模块、URL 模块、supervisor 工具

    一.Node.js创建第一个应用 如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求相应.不过对 Node.js 来说,概念完全 ...

  2. Node.js学习笔记(四) --- fs模块的使用

    目录 . fs.stat 检测是文件还是目录 . fs.mkdir 创建目录 . fs.writeFile 创建写入文件 . fs.appendFile 追加文件 . fs.readFile 读取文件 ...

  3. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  4. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  5. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  6. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  7. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

  8. Node.js学习笔记(二):模块

    模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的.一个 Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码.JSON 或者编译过的 C/C++ 扩展. ...

  9. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

随机推荐

  1. FORM标准默认时间区间处理

    WHEN-NEW-FORM-INSTANCE DECLARE    temp_date         date;    client_timezone   date;    char_date    ...

  2. htop简介

    htop可谓top的升级版,top不可以鼠标操作,但是htop可以使用鼠标操作 启动方式:命令行下输入htop直接启动,启动后的界面如图所示 操作:可以使用上下左右方向键进行移动查看.可以使用鼠标点击 ...

  3. Android 使用SharedPreferences数据存储

    自己写了个SP辅助类 尽管写的有点啰嗦,也是自己的成果.例如以下: package com.yqy.yqy_testsputil; import android.annotation.Suppress ...

  4. ASP.NET Web API路由规则(二) 【转】

    http://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html 默认的规则 在ASP.NET MVC4中 global.asax.cs代码中 ...

  5. JAVA Eclipse的Android的进程和生命周期是什么

    安卓程序的生命周期是不受自己控制的,安卓的程序根据不同的重要性做了一些区分,最重要的进程仅仅在安卓已经崩溃或者卡死的情况下才会终止前台进程.   Activity就是表现层的界面,它有三种常见的状态, ...

  6. CentOS下配置iptables防火墙 linux NAT(iptables)配置

    CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/syscon ...

  7. Android中Java与web通信

    Android中Java与web通信不是新的技术了,在android公布之初就支持这样的方式,2011年開始流行,而这样的模式开发也称作Hybird模式. 这里对android中的Java与web通信 ...

  8. 阿里巴巴天猫超市团队招聘java开发工程师

    大家好,发个招聘信息:我是阿里巴巴集天猫超市开发团队的同学,我们部门目前在杭州招人,P6岗位,要求至少本科,熟悉java,spring等java开发技术,最好有互联网企业开发经验,感兴趣的可以通过我直 ...

  9. robotframework安装appium

    安装: Appium-Python-Client,在运行的cmd下输入:pip install Appium-python-Client 安装:robotframework-appiumlibrary ...

  10. 14:质数因子PrimeNum

    14:题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 详细描述: 函数接口说明: public String getResult( ...