您的位置:首页 > Web前端 > Node.js

汇智网node学习笔记

2016-01-12 19:59 701 查看

快速入门

下载配置

偷懒点,直接官网上下载安装包,像安装一般的软件那样,安装配置就行了。具体的可以百度

node的特点

回调函数

模块

回调函数

由于node基于事件驱动的,回调函数必不可少,我的回调函数理解就是到达我们要的条件后执行的函数,并不是定义了就执行。

setTimeout(function(){
console.log('callback is called');
},2000);
//比如定时就是到达我们定的时间后,执行输出函数


标准回调函数

function(err,data){
// 做点什么,err是错误信息,data是执行回调函数时传入的数据
}


模块

这个说了很多了,一个模块就是个js文件或者功能,防止变量污染,一般就是引用模块(实例化),然后使用模块。

模块比如:os fs url http……

require("模块");
var os = require("os");
var result = os.platform(); //查看操作系统平台
//os.release(); 查看操作系统版本
//os.type();  查看操作系统名称
//os.arch();  查看操作系统CPU架构

console.log(result);


参考文档

node中文API

node中文API

process

process是一个全局内置对象,可以在代码中的任何位置访问此对象,这个对象代表我们的node.js代码宿主的操作系统进程对象。

使用process对象可以截获进程的异常、退出等事件,也可以获取进程的当前目录、环境变量、内存占用等信息,还可以执行进程退出、工作目录切换等操作

1. process.cwd();//获取当前进程目录
2. process.chdir("目录");//改变应用程序目录
3. console.log = function(d){
process.stdout.write(d+'\n');//标准输出流,console.log()就是封装的它
}
4.process.stderr.write(输入内容);//和stdout差不多,不过是输出错误信息的
5.process.stdin.on('readable', function() {
var chunk = process.stdin.read();//标准输入流
if (chunk !== null) {
process.stdout.write('data: ' + chunk);
}
});
6.process.exit(code);//杀进程的,code为退出后返回的代码
7.process.stdout.on('data',function(data){
console.log(data);//为stdout注册data事件,我们就可以拿到它输出的内容了。
8.process.stdin.setEncoding(编码);
process.stdout.setEncoding(编码);
process.stderr.setEncoding(编码);
});


参考文档

汇智网process

fs

开发中我们经常会有文件I/O的需求,node.js中提供一个名为fs的模块来支持I/O操作,fs模块的文件I/O是对标准POSIX函数的简单封装。

var fs = require('fs');

//写入文件
fs.writeFile('tet.txt', 'hello world 我是谁', function(err){
if(err) throw err;

console.log('Saved successfully');
});

//追加文件
fs.appendFile('tet.txt','你是pengpeng',function(err){
if(err) throw err;

console.log('内容追加完成');
});

//判断文件是否存在
fs.exists('/etc/passwd', function (exists) {

console.log(exists ? "存在" : "不存在!");
});

//重命名文件也可移动文件,fs.rename(旧文件,新文件,回调函数());
fs.rename('tet.txt','texxt.txt',function(err){
if (err) throw err;

console.log('Successful modification,');
});

//读取文件
fs.readFile('server.js',function(err,data){
if(err) throw err;
fs.writeFile('test.txt',data,function(err){
if(err) throw err;
console.log('server.js内容读取写入完成');
})
});

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

//创建目录 fs.mkdir(路径,权限,回调函数(err)); 权限:可选参数,只在linux下有效,表示目录的权限,默认为0777,表示文件所有者、文件所有者所在的组的用户、所有用户,都有权限进行读、写、执行的操作。
fs.mkdir('fs',function(err){
if(err) throw err;
console.log('fs 目录创建完成');
});

//删除目录 fs.rmdir()
fs.rmdir('fs2',function(err){
if(err) throw err;
console.log('fs 目录删除成功');
});

//读取目录
fs.readdir('fstest',function(err,files){
if(err) throw err;
console.log('读取目录完成');
console.log(files);
});


url

node.js为互联网而生,和url打交道是无法避免的了,url模块提供一些基础的url处理。

这个模块有三个函数比较常用

var url=require('url');

//parse()函数,基础用法
var result=url.parse('http://www.baidu.com/index/cc?page=1');

console.log(result);

//parse(url,true/false); true会将查询条件也转换成json格式
var result2=url.parse('http://www.baidu.com/index/cc?page=1',true);

console.log(result2);

//parse(url,true/false,true/false) 解析主机 会将//和第一个/之间的解析为主机名
var result3=url.parse('http://www.baidu.com/index/cc?page=1',true,true);

console.log(result3);

//格式化 format
var result4=url.format({
protocol: 'http:',
hostname:'www.baidu.com',
port:'80',
pathname :'/news',
query:{page:1}
});

console.log(result4);

//组装去往下一个网址
var url = require('url');

url.resolve('http://example.com/', '/one')  // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'


path

本模块包含一套用于处理和转换文件路径的工具集,用于处理目录的对象,提高用户开发效率

var path=require('path');

/*======================函数==============================
normalize()   格式化路径
join()        拼合路径
dirname()     返回路径中的目录名
basename()    返回路径中的最后一部分,并且可以对其进行条件排除
extname()     返回路径中文件的扩展名(以最后一个'.'开始,返回'.'以及'.'以后的所有字符串,如没有'.',则返回空字符串)
========================================================*/

//格式化路径 normalize()不符合规范的路径经过格式化转换为标准路径,解析路径中的.与..外,还能去掉多余的斜杠。
var data1 = path.normalize('/path///normalize/hi/..');
console.log(data1);//'    /path/normalize/'

//拼合路径 join() 将传入的多个路径拼接为标准路径并将其格式化,返回规范后的路径,避免手工拼接路径字符串的繁琐
var data2 = path.join('///you', '/are', '//beautiful');
console.log(data2);//'/you/are/beautiful'

//返回路径中的目录名 dirname()
var data3 = path.dirname('/foo/strong/cool/nice');
console.log(data3);

//basename函数可返回路径中的最后一部分,并且可以对其进行条件排除.
var data4 = path.basename('/foo/strong/basename/index.html');
var data5 = path.basename('/foo/strong/basename/index.html','.html');
console.log(data4 + ' "and" ' + data5);//'index.html "and" index'

//extname函数返回路径中文件的扩展名(以最后一个'.'开始,返回'.'以及'.'以后的所有字符串,如没有'.',则返回空字符串)
var data6 = path.extname('index.html');
console.log(data6);//'.html'


Query String

主要是处理字符串和对象之间的转换,序列化和反序列化

var querystring=require('querystring');

//序列化 及多参数用法 stringify()
var result1 = querystring.stringify({foo:'bar',cool:['xux', 'yys']});
console.log(result1);//foo=bar&cool=xux&cool=yys

var result2 = querystring.stringify({foo:'bar',cool:['xux', 'yys']},'*','$');
console.log(result2); //'foo$bar*cool$xux*cool$yys'

//反序列化 以及多参数用法 parse()
var result3 = querystring.parse('foo=bar&cool=xux&cool=yys');
console.log(result3);//{ foo: 'bar', cool: ['xux', 'yys']}

var result = querystring.parse('foo@bar$cool@xux$cool@yys','@','$');
console.log(result);//{ foo: '', bar: 'cool', xux: 'cool', yys: '' }


util

var util=require('util');

/*================================================================
inspect(object,[showHidden],[depth],[colors])将任意对象转换为字符串的函数,通常用于调试和错误输出。它至少接受一个参数object,即要转换的对象,我们来学习它的简单用法
format() 根据第一个参数,返回一个格式化字符串
isArray()
isDate()isDate函数可以判断对象是否为日期类型,是则返回ture,否则返回false
isRegExp()函数可以判断对象是否为正则类型,是则返回ture,否则返回false

==================================================================*/

//inspect()
var obj={a:1,b:2}
var result1 = util.inspect(obj);
console.log(result1);

//format()根据第一个参数,返回一个格式化字符串,第一个参数是一个可包含零个或多个占位符的字符串。每一个占位符被替换为与其对应的转换后的值,支持的占位符有:"%s(字符串)"、"%d(数字<整型和浮点型>)"、"%j(JSON)"、"%(单独一个百分号则不作为一个参数)"。
//如果占位符没有相对应的参数,占位符将不会被替换
var result2 = util.format('%s:%s', 'foo');
console.log(result2);//'foo:%s'
//如果有多个参数占位符,额外的参数将会调用util.inspect()转换为字符串。这些字符串被连接在一起,并且以空格分隔
var result3 = util.format('%s:%s', 'foo', 'bar', 'baz');
console.log(result3);//'foo:bar baz'
//如果第一个参数是一个非格式化字符串,则会把所有的参数转成字符串并以空格隔开拼接在一块,而且返回该字符串
var result = util.format(1, 2, 3);
console.log(result);

//isArray()
var result4 = util.isArray(object);
console.log(result4);

//isDate()
var result5 = util.isDate(object);
console.log(result5);

//isRegExp
var result6 = util.isRegExp(object);
console.log(result6);


子进程

众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,

通过多进程来实现对多核CPU的利用. child_process模块提供了四个创建子进程的函数,分别是spawn,exec,execFile和fork

var child_process = require('child_process');
/*================================================================
*spawn()用给定的命令发布一个子进程,只能运行指定的程序,参数需要在列表中给出。
*exec()exec也是一个创建子进程的函数,与spawn函数不同它可以直接接受一个回调函数作为参数,回调函数有三个参数,分别是err, stdout , stderr
*execFile()函数与exec函数类似,但execFile函数更显得精简,因为它可以直接执行所指定的文件
*fork()函数可直接运行Node.js模块,所以我们可以直接通过指定模块路径而直接进行操作
==================================================================*/

//spawn()
var child = child_process.spawn( command );
child.stdout.on('data', function(data) {
console.log(data);
});

//exec()
child_process.exec( command , function(err, stdout , stderr ) {
console.log( stdout );
});

//execFile()
child_process.execFile( file , function(err, stdout , stderr ) {
console.log( stdout );
});

//fork()该方法是spawn()的特殊情景,用于派生Node进程。除了普通ChildProcess实例所具有的所有方法,所返回的对象还具有内建的通讯通道
child_process.fork( modulePath );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: