node

node 01 天

node.js 欢迎您,来到后台的世界。

学node.js 前的一些话

	前端:主要关心的是交互。数据的展示(页面)。
	后端:主要关系的数据。

1.什么是node.js

 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
 Node.js 的包管理器 npm,是全球最大的开源库生态系统。

2.node.js 的特点

单线程
非阻塞I/O
事件驱动

2. node.js 适合什么样的业务

	高并发  大量 I/O 业务		
	考试系统
	表单收集	
	聊天系统			
	图文直播

3.cmd 基本的命令

	win + r 打开运行窗口 在运行里输入 cmd 执行 就能打开 cmd 面板

	d:	切换盘符  切换到d 盘
	
	cd 	进入目录
		. 	当前目录
		..  上级目录

	dir	 查看当前目录下所有文件  

	cls  清屏

	tab  补全

	exit 退出

	上下键切换  输入的历史记录

4. 安装 node.js

	命令里操作

	查看 node.js 版本号	
		node -v	

	node --help 帮助

	npm -v   查看 npm 的版本号		

	npm install 模块名

	例:
		npm install jquery   // 默认安装最新的版本
		npm install jquery@1.8.3   // 安装指定版本的模块

5. node.js 环境

	cmd 里  

	node 执行

	ctrl + c  退出

	执行某个文件

	node 文件的路径

6. 模块

	node.js 以模块为单位划分所有的功能。并提供一套完善的模块加载机制。

7. 自己定义模块

	1. 直接通过 exports 暴露属性和方法
		// 暴露属性
		exports.pinpai = 'abc';
		// 暴露方法
		exports.fanghua = function(){
			console.log('我已经开启防滑模式');
		}

	2. 暴露一个 暴露对象
		function Hello() { 
			this.name = 'jack';
			this.sex = 18;
			this.say = function(){
				console.log('我今年18岁');
			}
		}; 
		// 暴露对象
		module.exports = Hello;	

		使用模块	
			// 引入 hello 模块
			var hello = require('./hello');
			var myhello  = new hello();
			console.log(myhello.name);
			myhello.say();

	// 注意:
	自定义模块 引入 的时候  require('./模块路径') 路径要完整, ./ 不能省略。

9. 引入模块

	require('模块路径')

8. 系统模块

8.1 http 模块

// 引入 http 模块
var http = require('http');

// 创建服务
http.createServer(function(req,res){
	/*
		req     request    请求的参数
		res     response   响应的参数
	*/	

	// 响应头信息
	res.writeHead(200,{"content-type":"text/html;charset=utf-8"});

	// 响应文本
	res.write('<h1 style="color:red">淫荡的一上午要结束了</h1>');

	// 响应结束
	res.end('<p>我也饿了<p>');

// 监听端口号
}).listen(3000)

node 02 天

linux 简单指令

	ls   	显示文件或目录
		-l   详细信息
		-a   显示所有文件 包括隐藏文件

	cd  	切换盘符		

	mkdir   创建目录	

	touch  	创建一个空文件

	echo    创建一个带内容的文件
		例:  echo '文件内容' > 文件路径(文件名)
			  echo 'hello wrokd' > 1.txt

	cat     查询文件内容

	编辑文件  vi  

	wc      统计文本的字数

	cp       拷贝

		cp  file1 file2;

	rm 		删除文件
		-r  递归删除
		-f  强制删除


	rmdir   删除空目录

buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

简单的操作:

	//              存储的字节
	var buf = new Buffer(9);

	buf.write('你好帅');

	console.log(buf.toString());

fs 文件模块

	目录 操作
		创建目录
		删除目录
		重命名目录
		读取目录


	文件操作:
		创建文件
		查看文件信息
		删除文件

创建目录

fs.mkdir('test',function(err){
	// err  错误信息的参数  如果 值是 null  成功
	console.log(err); //null
	if(err){
		console.log('操作失败')	
	}else{
		console.log('操作成功')	
	}
})

删除目录

fs.rmdir('test',function(err){
	if(err){
		console.log('操作失败')	
	}else{
		console.log('操作成功')	
	}	
})

重命名

fs.rename('test','abc',function(err){
	if(err){
		console.log('操作失败')	
	}else{
		console.log('操作成功')	
	}	
})

读取目录

// 读取目录
fs.readdir('abc',function(err,data){
	if(err){
		console.log('操作失败')	
	}else{
		console.log(data);
	}
})

创建文件

fs.writeFile('test.txt','你看我吊不?',function(err){
	console.log(err);
})

查看文件信息

fs.stat('test.txt',function(err,data){
	if(err){
		console.log('操作失败')
	}else{
		console.log(data);
	}
})

删除文件

	// 删除文件
	fs.unlink('test.txt',function(err){
		if(err){
			console.log('操作失败')
		}else{
			console.log('操作成功');
		}
	})

同步异步区别

	// 异步读取
	fs.readFile('input.txt',function (err, data) {
	   if (err) {
	       console.error(err);
	   }else{
		   console.log("异步读取: " + data.toString());
	   }
	});

	console.log('ok');
	*/

	// 同步读取
	var data = fs.readFileSync('input.txt');

	console.log("同步读取: " + data.toString());

	console.log("==========程序执行完毕。==========");

url

	var urlStr = 'http://www.baidu.com/index.php?name=jack';

	//  把 url 格式成对象,

	var res = url.parse(urlStr);
	// console.log(res);
	// console.log(res.query);
	/*
		Url {
		  protocol: 'http:',
		  slashes: true,
		  auth: null,
		  host: 'www.baidu.com',
		  port: null,
		  hostname: 'www.baidu.com',
		  hash: null,
		  search: '?name=jack',
		  query: 'name=jack',
		  pathname: '/index.php',
		  path: '/index.php?name=jack',
		  href: 'http://www.baidu.com/index.php?name=jack' 
		 }
	*/

	var urlObj = {
		protocol: 'http:',
		host: 'www.google.com',
		search: '?key=美女',
	}

	var myurl = url.format(urlObj);

	console.log(myurl)  //==> http://www.google.com?key=美女

path

	var url = 'http://www.baidu.com/admin/userlist/index.php';

	// 获取路径
	var dirname = path.dirname(url); 
	console.log(dirname);  // =>  http://www.baidu.com/admin/userlist


	var fileName = path.basename(url);
	console.log(fileName);  // =>  index.php

	var extName = path.extname(url);
	console.log(extName);   // .php  扩展名

querystring

	// 例子 1:
	var qs = require('querystring');

	var data = 'username=jack&age=18&sex=男';

	var res = qs.parse(data);  // =>  { username: 'jack', age: '18', sex: '男' }
	console.log(res);
	console.log(res.sex)


	// 例子2:
	var qs = require('querystring');

	var data = 'username=%E5%94%90%E4%BC%AF%E8%99%8E&age=18&sex=男';

	var res = qs.parse(data);  // =>  { username: '唐伯虎', age: '18', sex: '男' }

	console.log(res);
	console.log(res.sex)


golbal

	// 当前运行文件的路径
	console.log(__filename);  // => C:\phpStudy\WWW\H5_28\node03\global\02.js

	// 目录名
	console.log(__dirname);  // => C:\phpStudy\WWW\H5_28\node03\global


	// var i = 0;
	/*setInterval(function(){
		console.log(++i);

	},1000);

	*/

	setTimeout(function(){
		console.log('ok')
	},3000)

路由

// 引入 http 模块
var http  = require('http');

// 引入文件模块
var fs = require('fs');

// 创建服务
http.createServer(function(req,res){
	/*
		req 请求的参数
		res 响应的参数
	*/

	console.log(req.url);

	if(req.url=='/login'){
		// 读取文件
		fs.readFile('./html/login.html',function(err,data){
			if(err){
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end('读取页面失败');
			}else{
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end(data);
			}
		})

	}else if(req.url == '/show'){

		// 读取文件
		fs.readFile('./html/show.html',function(err,data){
			if(err){
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end('读取页面失败');
			}else{
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end(data);
			}
		})

	}else if(req.url == '/'){
		// 读取文件
		fs.readFile('./html/index.html',function(err,data){
			if(err){
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end('读取页面失败');
			}else{
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end(data);
			}
		})


	}else if(req.url=='/404.jpg'){

		// 读取图片
		fs.readFile('./html/404.jpg',function(err,data){
				// 响应的头信息
				res.writeHead(200,{'content-type':'image/jpg'});
				// 响应模版
				res.end(data);
		})

	}else if(req.url == '/style.css'){

		// 读取文件
		fs.readFile('./html/style.css',function(err,data){
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/css;charset=utf-8'});
				// 响应模版
				res.end(data);
		})

	}else{
		// 读取文件
		fs.readFile('./html/404.html',function(err,data){
			if(err){
				// 响应的头信息
				res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end('读取页面失败');
			}else{
				// 响应的头信息
				res.writeHead(404,{'content-type':'text/html;charset=utf-8'});
				// 响应模版
				res.end(data);
			}
		})		
	}

// 监听端口
}).listen(3000)

npm 使用

npm init   初始化  会给我们生成 package.json

npm install  安装 package.json 文件里 需要依赖 的所有模块

npm install 模块名 --save  // 把下载的模块 保存到  package.json 文件里 需要依赖的  dependencies 属性里

// 查看 模块 的所有版本
npm view 模块名 versions

  npm  下载模块

ejs 模版引擎

	

前端的 bootstrap

express node.js 框架

路由

	// 引入 express 框架
	var express = require('express');

	var app = express();

	// express 路由
	app.get('/admin',function(req,res){
		res.send('这是后台');
	});

	// 首页
	app.get('/',function(req,res){
		res.send('首页')
	})

	// 通配
	app.get('*',function(req,res){
		res.send('404');
	})

	app.listen(3000);

posted @ 2017-06-30 15:45  程爱英  阅读(198)  评论(0编辑  收藏  举报