node.js概述

1. node.js介绍

node.js是一个开发平台,该平台使用的编程语言是JavaScript,是基于Chrome V8 JavaScript引擎构建的,可以开发控制台程序(命令行程序、CLI程序)、桌面应用程序(GUI)(借助node-webkit、electron等框架实现)、web应用程序(网站)。

node.js全栈开发技术栈:MEAN - MongoDB、Express、Angular、node.js。

特点:事件驱动(当事件被触发时,执行传递过去的回调函数);非阻塞 I/O模型(当执行I/O操作时,不会阻塞线程);单线程;拥有世界最大的开源库生态系统 - npm。

2. 区别

(1)传统PHP等开发网站

(2)node.js开发网站

3. REPL

全称Read-Eval-Print-Loop,即交互式解释器,R 读取,读取用户输入,解析输入了JavaScript数据结构并存储在内存中;E 执行,执行输入的数据结构;P 打印,输出结果;L 循环,循环操作以上步骤直到用户两次按下ctrl-c按钮或输入'.exit'退出,直接在控制台输入'node'命令进入REPL环境,和浏览器开发人员工具中的控制台功能类似。

4. 初体验

for(var i=0; i<10; i++){
    for(var j=0; j<=i; j++){
        process.stdout.write('*');
    }
    console.log();
}
// process模块在使用的时候无需require()函数加载该模块,可直接使用,fs模块则需加载,var fs = require('fs');
// process模块是全局的模块,而fs模块不是,全局模块可直接使用,非全局模块需加载

5. 文件操作

(1)写文件

// 写文件:fs.writeFile(file, data[, options], callback)
var fs = require('fs');
var msg = 'Hello, Karry!';
fs.writeFile('./hello.txt', msg, 'utf-8', function(err) {
    if(err) {
        console.log('写文件出错!具体错误:' + err);
    } else {
        console.log('OK');
    }
})

(2)读文件

var fs = require('fs');
// 读文件:fs.readFile(path[, options], callback)
// 此处./hello.txt相对路径,相对的是执行node命令的路径,而不是相对于当前正在执行的js文件
// __dirname: 表示当前正在执行的js文件所在的目录
// __filename: 表示当前正在执行的js文件的完整路径

// var filename = __dirname + '\\' + 'hello.txt';
// fs.readFile(filename, 'utf8', function(err, data) {
fs.readFile('./hello.txt', 'utf8', function(err, data) {
    if(err) {
        throw err;
    }
    // data参数的数据类型是一个buffer对象,里面保存的是一个一个的字节,需转换成字符串
    // console.log(data.toString('utf8'));
    // 函数调用时传入'utf8'则不需转换
    console.log(data);
})

(3)path路径拼接

var path = require('path');
var filename = path.join(__dirname, 'hello.txt');

(4)创建文件夹

var fs = require('fs');
// 创建文件夹,父文件夹下有三个子文件夹
fs.mkdir('./tfboys', function(err) {
    if(err) {
        throw err;
    }
    // 创建./tfboys/Karry目录,无论是否存在./tfboys目录
    fs.mkdir('./tfboys/Karry', { recursive: true }, function(err) {
        if(err) {
            throw err;
        }
    });
    fs.mkdir('./tfboys/Roy', { recursive: true }, function(err) {
        if(err) {
            throw err;
        }
    });
    fs.mkdir('./tfboys/Yee', { recursive: true }, function(err) {
        if(err) {
            throw err;
        }
    });
})

PS:对于异步操作,try-catch是无法捕获异常的,要通过判断错误号(err.code)来进行出错处理。

6. NPM

Node Package Manager,Node包管理器,以JavaScript编写的软件包管理系统。

(1)常用命令

(2)模块(modules)和包(packages)的区别

(3)package.json文件:包说明文件(项目描述文件、元数据),用来管理组织一个包(一个项目),位于当前项目根目录下,json格式;常见项name包的名字、version版本、description描述、author作者、main包的入口js文件,从main字段这里指定的那个js文件开始执行、dependencies当前包依赖的其他包,前两项为必有项。

package-lock.json文件:项目依赖说明文件,加载更快。

7. node.js模块分类

(1)核心模块Core Module、内置模块、原生模块:fs、http、path、url等,所有内置模块在安装node.js时就已经编译成二进制文件,可以直接加载运行(速度较快),部分内置模块在node.exe这个进程启动的时候就已经默认加载了,可以直接使用。

(2)文件模块:按文件后缀划分,加载时,没有指定后缀名例如example,则按照如下顺序依次加载相应模块:example.js、example.json、example.node、example文件夹(模块)-> package.json -> main(入口文件 app.js -> .js、.json、.node)。

(3)自定义模块(第三方模块):mime、cheerio、moment、mongo。

(4)require函数加载模块原理(被加载的模块会先执行一次,返回一个对象{}):检查Module._cache中是否有缓存的模块实例;如果缓存中没有,那么创建一个Module实例;将创建的Module实例保存到缓存中,供下次使用;调用module.load()读取模块内容,然后调用module.complie()编译执行(封装成一个沙箱),该模块如果加载解析出错,那么从缓存中删除该模块;返回module.exports。

(5)CommonJs:为JavaScript语言定制的一种模块规范、编程API规范,例如规定了require加载模块,node.js遵循了这些规范。

(6)exports和module.exports指向的是同一个对象,最终require()函数返回的是module。exports中的数据,return module.exports,即当exports的指向改变时,返回的module.exports不发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值