00 NodeJs基础
2018-10-18 本文已影响0人
亨锅锅
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');
// 没有字符参数
/*
<Buffer e4 b8 80 e5 8f aa e8 9b a4 e8 9f 86 0a 20 20 20 20 e5 9b 9b e6 9d a1 e8 85 bf 0a 20 20 20 20 20 20 20 20 e5 9b 9b e4 b8 aa e7 be 8e e7 9c 89 0a 20 20 ... >
*/
// 添加了字符参数
//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');
// 没有字符参数
/*
<Buffer e4 b8 80 e5 8f aa e8 9b a4 e8 9f 86 0a 20 20 20 20 e5 9b 9b e6 9d a1 e8 85 bf 0a 20 20 20 20 20 20 20 20 e5 9b 9b e4 b8 aa e7 be 8e e7 9c 89 0a 20 20 ... >
*/
// 添加了字符参数
//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('文件夹删除成功');
})
})