00 NodeJs基础

NodeJs

//  查看版本
node -v
node --version
//查看安装的版本
nvm list
nvm ls
// 创建一个文件夹
mkdir NodeDemo
// 创建一个app.js 文件
touch app.js

输入内容

console.log("hello node");

运行
node app.js

hello node

全局对象

console.log("hello node");

//全局对象
// 定时器
// setTimeout(function () {
//     console.log('3 seconds have passed');
// },3000);
//
// var time = 0;
// var timer = setInterval(function () {
//     time += 2;
//     console.log(time + 'seconds have passed');
//     if(time === 6){
//         clearInterval(timer);
//     }
// },2000);


// 路径
// 不包含文件名
console.log(__dirname);
// 包含文件名
console.log(__filename);

//global
console.log(global);

引擎

js引擎
电脑不识别也不理解js
js引擎的作用就是让电脑识别js代码

nodejs是使用c++写的
V8 是Node.js的核心
V8的作用就是让js代码能够让电脑识别

流程梳理
js
c++ node v8
电脑

模块 module

stuff.js

var counter = function (arr) {
    return '一共有' + arr.length + '个元素在数组中';
}

// console.log(counter(['a', 'b', 'c']));

var adder = function (a,b) {
    return `你需要计算的两个值得和为:${a+b}`;
}

var PI = 3.142;

// module
// module.exports = counter;

// module.exports.counter = counter;
// module.exports.adder = adder;
// module.exports.PI = PI;

module.exports = {
    counter: counter,
    adder: adder,
    PI: PI
}

app.js

// require
// var counter = require('./stuff')
// console.log(counter(['a', 'b', 'c']));

var stuff = require('./stuff')

console.log(stuff.counter(['a', 'b', 'c']));
console.log(stuff.adder(5, stuff.PI));

事件模块

1 大多数Node核心API都是采用异步事件驱动架构(fs/http)
2 所有能触发事件的对象都是EventEmitter类的实例
3 事件流程:引入模块 》创建EventEmitter对象 》注册事件 》触发事件

// 事件模块

// 1 引入事件模块
//var stuff = require('./stuff')
// 引入node自带的模块不需要路径
var events = require('events');

// 2 创建EventEmitter 对象
var myEmitter = new events.EventEmitter();

// 3 注册事件
myEmitter.on('someEvent',function (msg) {
    console.log(msg);
})

// 触发事件
myEmitter.emit('someEvent','事件粗发并传递参数到注册事件的回调函数中'); 

结果:

事件粗发并传递参数到注册事件的回调函数中

异步的事件

// 事件模块

// 1 引入事件模块
//var stuff = require('./stuff')
// 引入node自带的模块不需要路径
var events = require('events');

// 2 创建EventEmitter 对象
var myEmitter = new events.EventEmitter();

// 3 注册事件
myEmitter.on('someEvent',function (msg) {
    console.log(msg);
})

// 触发事件
myEmitter.emit('someEvent','事件事件并传递参数到注册事件的回调函数中');

console.log(1);

结果:

事件事件并传递参数到注册事件的回调函数中
1

上面的结果说明是同步的
如果要异步,看下面的代码

// 事件模块

// 1 引入事件模块
//var stuff = require('./stuff')
// 引入node自带的模块不需要路径
var events = require('events');

// 2 创建EventEmitter 对象
var myEmitter = new events.EventEmitter();

// 3 注册事件
myEmitter.on('someEvent',function (msg) {
    // es6
    // setImmediate(() => {
    //     console.log('异步进行:'+msg);
    // });

    setImmediate(function () {
        console.log('异步进行:'+msg);
    });

})

// 触发事件
myEmitter.emit('someEvent','事件事件并传递参数到注册事件的回调函数中');

console.log(1);

结果:

1
异步进行:事件事件并传递参数到注册事件的回调函数中

文件系统

文件系统主要对项目中的文件进行操作
1 读取文件 fs.readFile
2 写入文件 fs.writeFile
3 流程:引入fs模块 》调用方法 》异常捕获

//新建一个文本文件readMe.txt,并输入内容
一只蛤蟆
    四条腿
        四个美眉
            八只__

编写代码


// 文件系统

// 1 引入文件系统模块
var fs = require('fs');

// 2 通过对象调用方法
//var readMe = fs.readFileSync('readMe.txt');
// 没有字符参数
/*

*/
// 添加了字符参数
//var readMe = fs.readFileSync('readMe.txt','utf8');
/*
一只蛤蟆
    四条腿
        四个美眉
            八只__
 */
// console.log(readMe);

// 会创建一个writeMe.txt文件,并写入读取出来的readMe的值
// fs.writeFileSync('writeMe.txt',readMe);

// 异步读取文件
fs.readFile('readMe.txt','utf8',function (err,data) {
    if (err) throw err;
    console.log(data);
})

// 异步写入文件
fs.readFile('readMe.txt','utf8',function (err,data) {
    if (err) throw err;
    fs.writeFile('writeMe2.txt',data);
})

console.log(1);

结果:
1 控制台输入下面的内容
2 多了一个writeMe2.txt文件并写入了内容

// 我是控制台输出的内容
1
一只蛤蟆
    四条腿
        四个美眉
            八只__

文件系统操作

文件系统主要对项目中的文件进行操作
1 创建文件夹 fs.mkdir
2 删除文件夹 fs.rmdir
3 删除文件 fs.unlink
4 流程:引入fs模块 》调用方法 》异常捕获

// 命令行的一点小补充
rmdir删除空目录,不过一旦目录非空会提示
Directiry not empty

使用rm既可以删除文件又可以删除文件夹
删除文件夹(无论文件夹是否为空),使用 -rf 命令即可。
即:rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

// 文件系统

// 1 引入文件系统模块
var fs = require('fs');

// 2 通过对象调用方法
//var readMe = fs.readFileSync('readMe.txt');
// 没有字符参数
/*

*/
// 添加了字符参数
//var readMe = fs.readFileSync('readMe.txt','utf8');
/*
一只蛤蟆
    四条腿
        四个美眉
            八只__
 */
// console.log(readMe);

// 会创建一个writeMe.txt文件,并写入读取出来的readMe的值
// fs.writeFileSync('writeMe.txt',readMe);

// 异步读取文件
// fs.readFile('readMe.txt','utf8',function (err,data) {
//     if (err) throw err;
//     console.log(data);
// })

// 异步写入文件
// fs.readFile('readMe.txt','utf8',function (err,data) {
//     if (err) throw err;
//     fs.writeFile('writeMe2.txt',data);
// })
//
// console.log(1);

// fs.unlink('writeMe2.txt',function (err) {
//     if (err) throw err;
//     console.log('文件删除成功');
// })

//创建文件夹 同步
// fs.mkdirSync('stuff');

//删除文件夹 同步
// fs.rmdirSync('stuff');

// 异步创建文件夹和删除文件夹
// fs.mkdir('stuff',function () {
//     fs.readFile('readMe.txt','utf8',function (err,data) {
//         if (err) throw err;
//         fs.writeFile('./stuff/writeMe.txt',data);
//     })
// })

// 异步删除文件夹
// 1 先删除文件夹中的文件 2 再删除外部的文件夹
fs.unlink('./stuff/writeMe.txt',function () {
    fs.rmdir('stuff',function (err) {
        if (err) throw err;
        console.log('文件夹删除成功');
    })
})

你可能感兴趣的:(00 NodeJs基础)