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('文件夹删除成功');
})
})