nodejs笔记

158 阅读4分钟

一、基础模块

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发送的数据')
})