一、基础模块
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发送的数据')
})