一、基础模块
1.http
//引用模块 var http = require("http"); //创建一个服务器,回调函数表示接收到请求之后做的事情 var server = http.createServer(function(req,res){ res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"}); //req 参数表示请求,res 表示响应 console.log("服务器接收到了请求" + req.url); res.end(); // End 方法使 Web 服务器停止处理脚本并返回当前结果 }); //监听端口 server.listen(3000,"127.0.0.1");
2.url
url.parse() 解析 URL url.format(urlObject) //是上面 url.parse() 操作的逆向操作 url.resolve(from, to) 添加或者替换地址 var result = url.parse(req.url,true); console.log(result); console.log('aid='+result.query.aid);
二、npm
1. npm -v 查看 npm 版本
2. 使用 npm 命令 安装模块
npm install Module Name 如安装 jq 模块: npm install jquery
3. npm uninstall moudleName 卸载模块
npm uninstall ModuleName
4. npm list 查看当前目录下已安装的 node 包
npm list
5. npm info jquery 查看 jquery 的版本
npm info 模块 //查看模块的版本
6. 指定版本安装 npm install jquery@1.8.0
三、package.json
package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、 版本、许可证等元数据)
1、创建 package.json
npm init npm init –yes
2、package.json 文件
{ "name": "test", "version": "1.0.0", "description": "test", "main": "main.js", "keywords": [ "test" ], "author": "wade", "license": "MIT", "dependencies": { "express": "^4.10.1" }, "devDependencies": { "jslint": "^0.6.5" } } ^表示第一位版本号不变,后两位取最新的 ~表示前两位不变,最后一个去最新 *表示全部取最新
3、安装模块并把模块写入 package.json(依赖)
npm install babel-cli --save-dev npm install 模块 --save npm install 模块 --save-dev
4、dependencies 与 与 devDependencies 之间的区别?
使用 npm install node_module –save 自动更新 dependencies 字段值; 使用 npm install node_module –save-dev 自动更新 devDependencies 字段值; dependencie 配置当前程序所依赖的其他包。 devDependencie 配置当前程序所依赖的其他包,只会下载模块,而不下载这些模块的 试 测试和文档框架 "dependencies": { "ejs": "^2.3.4", "express": "^4.13.3", "formidable": "^1.0.17" } ^表示第一位版本号不变,后面两位取最新的 ~表示前两位不变,最后一个取最新 *表示全部取最新
四、fs模块
1.fs.stat 检测是文件还是目录
const fs = require ( 'fs') fs.stat( 'hello.js', (error, stats) =>{ if(error){ console.log(error) } else { console.log(stats) console.log(` ` 文件:${stats.isFile()}` `) console .log(` ` 目录:${stats.isDirectory()}` `) } })
2.fs.mkdir 创建
const fs = require ( 'fs') fs.mkdir( 'logs', (error) => { if(error){ console.log(error) } else { console.log(' ' 成功创建目录: logs') } })
3. fs.writeFile 创建 写入文件
fs.writeFile( 'logs/hello.log', ' ' 您好 ~ \ \n n' ', (error) => { if(error) { console.log(error) } else { console.log(' ' 成功写入文件' ') } }) --如果hello.log不存在,会自动创建的
4.fs.appendFile 追加文件
fs.appendFile( 'logs/hello.log', 'hello ~ \ \n n' ', (error) => { if(error) { console.log(error) } else { console.log(' ' 成功写入文件' ') } }) --如果hello.log不存在,会自动创建的
5.fs.readFile 读取文件
const fs = require ( 'fs') fs.readFile( 'logs/hello.log', 'utf8', (error, data) =>{ if (error) { console.log(error) } else { console.log(data) } })
6.fs.readdir 读取
const fs = require ( 'fs') fs.readdir( 'logs', (error, files) => { if (error) { console .log(error) } else { console .log(files) } })
7.fs.rename 重命名
const fs = require ( 'fs') fs.rename( 'js/hello.log', 'js/greeting.log', (error) =>{ if (error) { console.log(error) }else { console.log(' ' 重命名成功' ') } })
8. fs.rmdir 删除目录
fs.rmdir( 'logs', (error) =>{ if (error) { console.log(error) } else { console.log(' ' 成功的删除了目录: logs') } })
9. fs.unlink 删除 文件
fs.unlink( `logs/${file}`, (error) => { if (error) { console.log(error) } else { console.log(` ` 成功的删除了文件 : ${file}` `) } })
10. fs.createReadStream 从文件流中读取数据
const fs = require ( 'fs' ') var fileReadStream = fs.createReadStream( 'data.json') let count =0; var str = ''; fileReadStream.on( 'data', (chunk) => { console.log(` `${ ++ count } 接收到:${chunk.length}` `); str +=chunk }) fileReadStream.on( 'end', () => { console.log(' ' --- 结束 ---' '); console.log( count ); console.log( str ); }) fileReadStream.on( 'error', (error) => { console.log(error) })
11. fs.createWriteStream 写入文件
var fs = require ( "fs"); var data = ' ' 我是从数据库获取的数据,我要保存起来' '; // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream( 'output.txt'); // 使用 utf8 编码写入数据 writerStream.write( data , 'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> finish 事件 writerStream.on( 'finish', function() { /*finish - 所有数据已被写入到底层系统时触发。*/ console.log(" " 写入完成。" "); }); writerStream .on( 'error', function(err){ console .log(err. stack); }); console .log(" " 程序执行完毕" ");
12. 管道流
var fs = require ( "fs"); // 创建一个可读流 var readerStream = fs .createReadStream( 'input.txt'); // 创建一个可写流 var writerStream = fs.createWriteStream( 'output.txt'); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe( writerStream ); console.log(" " 程序执行完毕" ");
**补充知识
######1.process.nextTick() --定时器(setTimeout()和setInterval()与浏览器中的API是一致的,定时器的问题在于, 他并非精确的(在容忍范围内)。尽管事件循环十分快,但是如果某一次循环占用的时间较多,那么下次循环时,他也许已经超时很久了。 比如通过setTimeout()设定一个任务在10毫秒后执行,但是在9毫秒后,有一个任务占用了5毫秒的cpu时间片,再次轮到定时器执行时, 时间就已经过期4毫秒。)
2.setImmediate()
setImmediate()方法与process.nextTicl()方法十分类似,都是将回调函数延迟执行。在node V0.9.1之前,setImmediate()还没有实现,那时候实现类似的功能主要是通过process,nextTick()来完成。
五、events事件
1.监听广播事件
EventEmitter.on('to_parent',function (data) { // console.log('接收到了广播') console.log(data); EventEmitter.emit('to_mime','给mime发送的数据') })