首先声明:这个是我边看边写的,所以会有很多不足之处以及错误之处,如果真的有人看到,还请海涵,也可以给我留言讲解一下 那我将不胜感激。
写这个原因呢 有三点 第一点是因为每次学完一段,通过写文章来帮助自己理解与练习加深印象,第二点让自己不要三天打渔两天晒网,第三点就是给没学过的人借鉴一下。此文章最重要的就是加深自己的理解,所以欢迎各位指出问题。
将持续更新
先说一个好用的工具nodemon 用它来代替node 命令, 它会一直监控你的文件有没有改变有改变就重启,很方便.
一 node app 执行环境
node 只有一个入口文件 通过执行这个文件 来让程序运行 使用 node命令+(js文件名),一般情况这个文件名都叫 app.js 所以每次运行程序的时候 都是执行 node app / node app.js 这两个效果是相同的。(温馨提示:大家不要以为运行 就是执行命令 node app , 要看他的入口文件,//我也不知道应不应该叫做入口文件)
二 在app.js 中引入其他文件
新建一个common.js 文件 在里面定义两个方法,在app.js 中引入 并使用其中的方法。
common.js 文件
var sayNo = function(){
console.log("We should learn to say no");
};
var sayHello = function(){
console.log("We should be polite");
}
/* 想要在app.js 中使用 首先要将其暴漏出去 以供在app.js 中引入 下面是三种方法*/
# module.exports = sayNo ; //写的时候并没有#号
# module.exports.sayNo = sayNo;
module.exports.sayHello = sayHello;
# module.exports = {
sayNo:function(){
console.log("We should learn to say no");
} ,
...同上
}
app.js 文件
/* 首先引入comon.js 文件中的方法 才能使用*/
/* 同上暴露出去的三种 这里按照 上面的顺序 引入并使用*/
# var sayNo = require(' ./app ');
sayNo();
# var common = require(' ./app ');
common.sayNo();
common.sayHello();
# /* 第三种和第二种的使用方法是一样的 */
# /* 第二中和第三种 还可以这样 */
# var sayNo = require(' ./app ').sayNo;
sayNo();
最后 执行 node app
三 事件的绑定
在 node 里有一个events 的事件库 我们在使用的时候必须先引入这个库 在实例化一个事件 就可以绑定事件了
var events = require('evens');
var myEvent = new events.EventEmitter();
myEvent.on('speak',function(message){
console.log(message);
});
myEvent.emit('speak','xiaoming is a pig');
在node 中还有一个 util 的核心库 虽然我已不怎么了解 不过 他的 .inherits方法可以继承 随意绑定事件还可以这么写。
/* 首先引入util */
var util = require('util');
var events = require('events');
var Person = function(name,age){
/*定义一个构造函数 因为util.inherits 是继承的方法 所以如果是一个变量是不可能会继承的*/
this.name = name;
this.age = age;
};
/*继承绑定事件*/
util.inherits(Person, events.EventEmitter);
var xiaoming = new Person("xiaoming","22");
var pudu = new Person("pudu","23");
var person = [xiaoming, pudu];
person.forEach(function(person){
person.on('speak',function(){
console.log(this.name + ":" + “我的年龄是” + this.age );
});
});
xiaoming.emit('speak');
pudu.emit('speak');
第四 读写文件 (异步 同步) || 删除文件 创建目录&&删除目录
简单介绍一下同步和异步的区别; js 代码都是从上往下逐条执行的,比如同步操作 当执行到读写文件的时候 如果文件特别大、那么花费时间就越长,因为是同步操作它后面的代码将会等到它执行结束才能执行,这将浪费很多时间,这个弊端感受到了吧!
而异步操作 将不会 执行到读写文件的时候,如果读写文件是异步的,那么程序到达了读写文件这里 就相当于通知一声你要执行了,不过他不会立即执行,程序继续往下走 当主线程没有什么执行的时候 他才会执行
同步操作
readFileSync('文件名',‘编码utf8’); //可以定义一个变量去接收他的返回值
writeFileSync('文件名',‘内容’); //可以定义一个变量去接收他的返回值
异步操作
readFile('文件名',‘utf8’, function(err,data){
console.log(data);
});
writeFile('文件名',‘内容’,function(){
console.log("1");
})
删除文件
fs.unlink(" filename ", function() {.... });
fs.unlinkSync(" filename ");
创建目录
fs.mkdir("目录名", function(){ ..... });
fs.msdirSync( "目录名");
删除目录
fs.rmdir("目录名", function(){ .... });
fs.rmdirSync("目录名")
流和管道 (这里这真是不懂啊!)
/* 创建一个读取的流 */
var fs = require(' fs ');
var myReadStream = fs.createReadStream(__dirname + "/a.txt","utf8");;
或者这么设置编码
myReadStream.setEncoding("utf8");
myReadStream.on('data',function( /*这里第一个参数是数据 其他的我也不知有几个参数 */ chunk){
console.log(chunk);
});
myReadStream.on('end',function(){
console.log(data);
})
/* 创建一个写入文件的流 */
var writeStream = fs.createWriteStream(__dirname + "b.txt");
writeStream.write(" ....... ");
/* 管道 */
myReadStream.pipe(writeStream); //这就把都出来的数据写入到了b.txt中
URL库
/* 引入 */
var url = require('url');
/* 他的一些方法 */
url.parse(request.url).pathname //获取地址
url.parse(request.url,true).query //获取参数 true => 对象 false => 字符串
url.format() //将对象变成url地址
url.resolve() //用于拼接字符串形成新的url
querystring 库
/* 有四个方法 */
querystring.parse(); //将字符串=>对象
querystring.stringify() //将对象=>字符串 和上一个parse方法是相对应的
querystring.escape() //将输入的字符串进项编码
querystring.unescape() //解码
第一阶段就这样结束了,下一阶段继续 ,有没有和我一起刚刚学习node 的小伙伴呢!可以留言哦.