NODEJS学习笔记
Node 学习 day1
- 使用http模块创建一个简单的服务器
var http=require(“http”);
//引用模块
http.createServer(function(req,res){
//创建服务
res.end(“hello world”);
//向用户写入
}).listen(80);
//监听80端口
- 文件系统fs
- 读取文件
- readFile(文件名,回调函数)
- 文件名:路径
- 回调函数:function(err,data){}
- err:错误汇报
- data:读取信息
- 写文件
- writeFile(文件名,写入的数据,回调函数)
- 文件名:文件路径
- 写入数据:写入的数据
- 回调函数:function(err){}
- err:写入错误。
- 修改文件名
- rename(原文件名,新文件名,回调函数);
- 回调函数:function(err){}
- err:返回错误。
- 读取文件
Node 学习 day2
- 请求方式
32k 1G |
二、get数据拆分
-
- querystring模块
- querystring.parse(get数据)
- 将get数据转换成josn数据
- url模块(推荐)
- url.parse(地址,选项)
- 将http地址完全解析
- 选项:
- true:解析query数据
- false:不进行query解析
- querystring模块
三、post数据处理
-
- GET与POST区别
- post数据很大:分段发送。1G
- get数据很小:一次发生。32K
- post处理
- req.on(标识,回调函数)
- 标识(字符串):
- ‘data’:多次接受数据。
- ‘end’:表示数据传输完成。
- 回调函数
- data:function(dat{}
- 注意:需要找个临时变量存储data。
- end:function(){}
- 注意:传输结束。
- data:function(dat{}
- 标识(字符串):
- req.on(标识,回调函数)
- GET与POST区别
Node 学习 day3
一、常用模块
二、自定义模块
-
- 引入模块
- require(模块名)
- 模块名:默认访问系统库,引入自己库加上./
- 编写模块
- 输出数据关键字:
- exports.变量=值;
- module.exports={变量:值,变量:值};
- 输出数据关键字:
- 调用模块
- 模块名.模块内的变量。
- 引入模块
- express模块(非侵入)
- 功能:
- 替代了http模块部分功能,并且增强http的部分功能。
- 加载页面更方便。
- 方法:
- 创建服务
- var server = express().listen(端口号);
- 请求并相应
- server.get(同下);
- server.post(同下);
- server.use(“请求路径”, function(req,res){ });
- res.send(数据),res.write(数据)的区别
- write只支持响应字符串和BUFFTER数据。
- send支持所有。
- req.query:表示表单返回的josn数据。
- res.send(数据),res.write(数据)的区别
- 中间件(express插件)
- express-static读取静态文件。
- 下载:npm install express-static
- 使用:express-static(“包含网页的文件夹路径”);
- 返回:返回存在的网页存放完整位置。
- body-parser解释post文本数据
- 下载:npm install body-parser
- 使用:server.use(bodyparser({extended:布尔值, limit:数字}));
- extended:表示是否扩展。
- limit:表示限制post数据传输大小,单位b。
- 作用:处理post数据,并且以req.body返回到下一个use。
- express-static读取静态文件。
- 链式操作
- 作用:以流水线形式执行use
- 格式:
- 创建服务
- 功能:
server.use(‘/’,function(req,res,next){
next();
});
server.use(‘/’,function(req,res,next){
console.log(“链式完成”);
});
-
-
-
- 注意:
- 路径必须一样。
- 如果想继续链式添加next(),不加表示不链。
- 注意:
- 自定义中间件
- 创建中间件文件
- 定义中间件函数
- module.exports={
-
-
变量名:function([形参表]){
return function(req,res,next){
next();
}
}
}
具体请看10讲
- cookie与session
- 什么是cookie
cookie是用于存储网页(浏览器)的状态信息的(http不能确定网页的状态),大小为4K。
-
- 什么是session
session是依赖于cookie的和cookie功能差不多,但是他存在服务器,大小不限。
-
- cookie-parser操作
- 安装:npm install cookie-parser
- 使用:
- cookie-parser操作
server.use(cookie-parser(“签名字符串”));//建立中间件
server.use(“路径”,function(req,res){
res.secret(“签名”);//可以省略
res.cookie(“名字”,”值”,{//发送cookie
path:在那个网页发送cookie,向上,
signed:逻辑值,//表示是否开启签名
maxAge:有效时间毫秒
});
})
读取返回的cookie值
req.cookies//表示无签名的cookie
req.signedCookies //表示签名的cookie
删除cookie
res.clearCookie(‘名字’)
-
- cookie-session操作
- 安装 :npm I cookie-session
- 说明:依赖于cookie-parser
- 操作:
- 读写session
- cookie-session操作
server.use(cookie-parser(“签名字符串”));//建立中间件
server.use(cookie-session({
kes:[值]//加密值
name:名字,
maxAge:有效期
}));
server.use(“路径”,function(req,res){
req.session[‘名字’]=’值’//session读写操作
})
Node 学习 day4
- 页面模板引擎
- 常用引擎
- ejs:非侵入
- jade:侵入
- 看视频学习。
- 常用引擎
- post文件上传
- post上传方式:
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
值 | 描述 |
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 "+" 加号,但不对特殊字符编码。 |
-
- post接收方式
- 文本信息接收:
- 模块:body-parser
- 二进制接收:
- 模块:multer
- 用法:
- 定义multer变量
- var objmulter=multer({dest:”文件存储路径”});
- 设置接收方式
- server.use(objmulter.single(“指定上传的控件名称”));
- server.use(objmulter.any());//接收所有的
- 定义multer变量
- any返回变量
- req.files
- 变量内容:
- 类型:数组
- fieldname:表示上传的控件名
- originalname:原来的名称
- encoding:编码
- mimetype:文件类型
- buffer:二进制文件内容
- size:大小
- 文本信息接收:
- 其他模块
- path解析文件路径
- 使用:
- var objpath=path.parser(“路径”);
- objpath返回值
- dir:文件路径
- base:文件名+扩展名
- ext:文件扩展名
- name:文件名
- 使用:
- path解析文件路径
- post接收方式
Node学习day5
- consolidate模板引擎集合
- 下载:npm I consolidate
- 使 用:
- server.set(‘view engine’,’html’);//设置查看方式:html
- server.set(‘view’,’目录’);//设置模板引擎的位置
- server.engine(‘html’,consolidate.ejs);//设置编译的对象,使用consolidate.ejs将ejs文件编译成html。
- render渲染页面
- res.render(‘指定模板文件’,{指定模板文件使用的json值});
- Router页面路由
- 下载 :npm I express
- 使用:
- var Router1=express.Router();//创建路由
- server.use(‘请求路径’,Router1)//添加路由;
- Router1.use(请求页面,function(req,res){});
- MYSQL操作
- 下载:npm I mysql
- 连接:
- 单连接
var connect=mysql.createConnection{
host:主机ip,
post:主机端口,
user:登录用户,
password:密码,
database:默认打开的库
}
connect.connect(function(err){});//监听是否连接成功
-
-
- 池连接
-
var poolconnect=mysql.createConnection{
host:主机ip,
post:主机端口,
user:登录用户,
password:密码,
database:默认打开的库,
connectionLimit:连接的数量(默认10)
}
-
-
- 断开连接
-
poolconnect.end(function(err){//池连接断开
console.log(“断开连接”,err);
});
----------------------------------------------------------------
connect.end(function(err){//断开单连接方法1.
console.log(“断开连接”,err);
})
connect.destroy()//断开连接方法2
-
- pool事件
获得(acquire)
池将发出一个获得
事件,当从池中获取连接时。在将连接传递给获取代码的回调之前,在对连接执行所有获取活动之后调用。
pool.on('acquire', function (connection) {
console.log('Connection %d acquired', connection.threadId);
});
连接(connection)
池将发出一个连接
在池中建立新连接时引发。如果需要在连接使用之前在其上设置会话变量,则可以侦听连接
事件。
pool.on('connection', function (connection) {
connection.query('SET SESSION auto_increment_increment=1')
});
排队(enqueue)
池将发出一个排队
事件,当回调排队等待可用连接时。
pool.on('enqueue', function () {
console.log('Waiting for available connection slot');
});
释放(release)
池将发出一个释放
事件,当连接被释放回池时。在对连接执行了所有发布活动之后,就会调用这一点,因此在事件发生时,该连接将被列为空闲。
pool.on('release', function (connection) {
console.log('Connection %d released', connection.threadId);
});
-
- sql语句执行
- 查询:
- sql语句执行
connect.query(“sql语句”,function(err,data){
//err错误
//data查询的返回结果
});
-
-
- 增加:
-
connect.query(“INSERT INTO `表名`(字段) values(?)”,[插入的数据],function(err){
});
-
-
- 其他依照以上的方式。
-
Node学习day6
- url重定向
- res.redirect(“重定目录”);
- MD5加密签名
- 下载加密库:npm I crypto
- 创建散列加密对象md5:
- var cryobj=crypto.createHash(‘md5’);
- 加密数据
- cryobj.update(数据);
- 返回加密结果
- var str=cryobj.digest(‘hex’);