首页 > 其他 > 详细

node笔记

时间:2018-05-25 16:40:51      阅读:196      评论:0      收藏:0      [点我收藏+]
var  htttp = require(‘http‘)   加载http模块

var server = http.createServer(function(req,res){ 创建一个服务器 req请求 res响应
req.url 请求地址
res.write() 给浏览器端输出
res.end() 结束
})

server.listen(8080) 监听

path 工具函数
1 path.join([path1][, path2][, ...])
用于连接路径。
2 path.resolve([from ...], to)
将 to 参数解析为绝对路径。
3 path.resolve(from, to)
用于将相对路径转为绝对路径。
4 path.parse(pathString)
返回路径字符串的对象。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
文件操作:fs -----file system 文件系统的缩写

var fs = require(‘fs‘) 加载fs模块

fs.readFile(文件名,回调函数) 读文件/异步操作 回调函数有两参数 err data/读到的数据

fs.writeFile(文件名,要写的内容,回调函数) 写文件 回调函数有一个参数 err

fs.rename(‘原来文件名‘,‘现在名字‘,function(err){})
。。。。。。。。。。。。案例练习。。。。。。。。。。。。。。。。

var http = require(‘http‘)
var fs = require(‘fs‘)

var server = http.createServer(function(req,res){
var fileName = ‘./www‘+req.url; //根目录下面有个www文件夹
fs.readFile(fileName,function(err,data){
if(err){
res.write(‘404‘)
}else{
res.write(data)
}
res.end()
})

})
server.listen(8080)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
数据请求
get请求
req.json({key:value}) 给前端发送数据,前端通过ajax请求得到数据
req.url //get数据存在url上
querystring 模块 把username=blue&age=18转换成json{username:blue,age:18}
querystring.parse(‘username=blue&age=18‘)-> {username:blue,age:18}
querystring.stringify 跟querystring.parse作用反过来
url模块 专门用来解析地址的 把http://baidu.com?username=blue&age=18解析
var obj = url.parse(‘http://baidu.com?username=blue&age=18‘,true) => obj.pathname-> http://baidu.com obj.query-> {username:blue,age:18}

post请求 数据分段发送
var str=‘‘
req.on(‘data‘,function(data){ data有一段数据到达就会触发一次
str+=data
})
req.on(‘end‘,function(){ end数据全部到达触发一次
console.log(str) 这里str已经是完整数据
})

var server = http.createServer(function(req,res){ 创建一个服务器 req请求 res响应
req //来接受前台传过来的数据
})
第二种方法通过中间件body-parser
app.use(bodyParser.urlencoded({extended:false}))
.......................................................................................

http:协议
协议流程 1 http客户端发起请求,创建端口
2 http服务器在端口监听客户端请求
3 http服务器想客服端返回状态和内容
浏览器后计算机 访问一个 地址的大概操作步骤

1. 浏览器(如Chrome)搜索自身的DNS 缓存

2. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)

3. 读取本地的 HOST 文件

4. 浏览器 发起一个DNS 的 一个系统调用

5. 浏览器获得域名对应的 IP 地址后,发起 HTTP 的“三次握手??”

6. TCP/IP 连接建立起来后,浏览器就可以向服务器发送 HTTP 请求了,例如使用 HTTP 的 GET 方法请求一个根域里的一个域名,协议可以采用 HTTP 1.0 的一个协议。

7. 服务器端接收到了这个请求,根据路径参数,竞购后端的一些处理后,把处理的一个结果的数据返回给浏览器,如果是 目标网 的页面就会把完整的 HTML 页面代码返回给浏览器。

8. 浏览器拿到了 目标网 的完整的HTML 页面代码,在解析和渲染这个页面的时候,里面的 JS 、CSS、 图片静态资源,他们同样也是一个个 HTTP 请求,都需要上面的主要七个步骤

9. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户
.......................................................................................
EventsEmitter
var EventsEmitter = require(‘events‘).EventsEmitter
var life = new EventsEmitter()
life.on(‘事件名‘,对应函数) //监听最多为10个
life.emit(‘事件名‘)
######################################################################################
模块化
系统模块 Crypto加密 Events事件 Net网络操作 OS操作系统信息 Path处理文件路径 stream流操作
自定义模块
require 引入模块
一般是引入系统模块 只要require(‘http‘)
有‘./‘从当前目录找,没有‘./‘ 从系统模块或者node_nodules文件夹找
module 模块输出批量 //module.exports ===exports
module.exports={}
exports 单个输出
exports.a=12 向外输出一个变量a

包管理器 npm install下载 publish上传包 unpublish删除包
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
express框架
保留了原生的功能,添加了一些方法
const express = require(‘express‘) 模块引入
const server = express()
server.use(‘地址‘,function(req,res){ 添加一个响应或者说处理请求
//
res.send(‘123‘)
res.redirect(‘地址‘) 重定向 地址是跟着根目录走的
res.end()
})
server.listen(8080)
。。。。。。。。。。。。。。。。。。。。。。。。。。。
server.get(‘/‘,function(req,res){}) 只接受get请求
server.post(‘/‘,function(req,res){}) 只接受post请求
server.use(‘/‘,function(req,res){}) 不论是get 还是post 最后都会走到use
express 中间件或者插件
1.express-static 处理静态文件
使用法法 server.use(expressStatic(‘./www‘))
2.body-parser

server.get(‘/‘,function(req,res){
req.query //get方式传递过来的数据,无需中间件支持
req.body //post方式传递过来的数据,需body-parser支持 用之前需 server.use(bodyParser.urlencoded{extended/扩展模式:false,limit/大小限制:2*1024})
})
*********************************************
express的链式操作
server.use(‘/‘,function(req,res,next){
console.log(‘a‘)
next() //必须要有next才会执行下面代码
})
server.use(‘/‘,function(req,res,next){
console.log(‘b‘)
})



、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
cookie ,session
cookie 在*********浏览器保存一些数据**********,每次向服务器发送请求都会带过来,只有4k,不安全
session 保存数据,****保存在服务器端****,存储大,安全
session 基于cookie实现的,cookie中会有session的id,服务器就是利用sessionid找到session文件,读取,写入
隐患:session劫持
在/aaa/bbb 路径下设置了一个cookie 那么在/aaa和/目录下都可以访问这个cookie 反之不行
cookie
1,读取 --基于cookie-parser来读起cookie 用法 server.use(cookieParser(‘密钥‘))//在req上加个cookies和signedCookies,加了密钥就可以把有密钥的cokie解析
server.use(‘/aaa/html‘,function(req,res){
req.signedCookies //读取加密钥的cookie
req.cookies //读取没有加密钥的cookie
res.cookie(‘user‘,‘cy‘,{path(在aaa路径下才能访问这条cookie):‘/aaa‘,maxAge(cookie过期时间):30*24*3600*1000,signed(签名密钥):true}) //发送设置一个cookie
res.clearCookie(删除cookie名字) 删除cookie
})
session 利用cookie-session中间件 用法server.use(cookieSession({keys:[]//必须加密钥数组,maxAge:过期时间,以毫秒为单位}))
用session必须先server.use(cookieParser())
然后在server.use(cookieSession({})) //在req加session 设置req.session[‘key‘]=value
解析好的session在req.session
删除delete req.session

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
模板引擎---------jade-ejs-swig
jade 侵入式
jade.renderFile(‘文件‘,{pretty(格式美化):true})
使用方法
html //缩进代表子元素
body
div
属性格式----属性放()里面,逗号隔开
script(src=‘a.js‘) ==><script src=‘a.js‘></script>
style有两种写法 1.style={width:‘100px‘} 2.style=‘width:100px‘
class有两种写法 2.class=[clasa,clasb] 2.class=‘clasa clasb‘
内容格式
1.空一个格直接往后写
p 内容==><P>内容</p>
| 代表|后面的内容原样输出
. 代表子(里面)的东西都原样输出 div.
- 代表后面是一段js代码
div!代表不需要转义输出html
include 引入外部文件
#{变量名} 代表变量
特殊 style=变量,class=变量 不需要加#{}
span #{a} 等价于 span=a 都输出<span> 变量a</span>
-------------------------------------------------------------------------------------
ejs 非侵入式
ejs.renderFile(‘文件‘,{数据},function(err){})
页面中用变量 <%= 变量名 %> =转义输出 -不转义输出
<% for(){ %>

<% } %>

<% include %> 引入
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
body-parser 只能解析上传数据不能解析上传的文件

设置 <form enctype=‘multipart/form-data‘> <input type=‘file‘ > </form>
multer 可以解析数据跟上传文件如图片
var multer =require(‘multer‘)
var obgMulter =multer({dest(存储路径):‘路径‘})
用法server.use(obgMulter.any()) 在req上加了一个files
上传上的文件 req.files=[{文件各种属性}]

multer解析完上传文件后,会被保存为一个包含以下字段的对象 req.files=[{文件各种属性}]:

fieldname - 表单提交的文件名(input控件的name属性)
originalname - 文件在用户设备中的原始名称
encoding - 文件的编码类型
mimetype - 文件的Mime类型
size - 文件的大小
destination - 文件的保存目录(DiskStorage)
filename - 文件在destination中的名称(DiskStorage)
path - 上传文件的全路径(DiskStorage)

buffer - 文件对象的Buffer(MemoryStorage)

..............................................
path 模块
var path =require(‘path‘)
var src=‘c:\\wamp\\www\\a.html‘
var obj =path.parse(str)
obj={
base:文件名部分包括扩展名,
ext: 扩展名,
dir: 路径
name:文件名不包括扩展名
}
path.resolve(_dirname,‘/public‘) 把相对路径转换成绝对路径

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
consolidate --适配,整合模板引擎到express里面
配置模板引擎三步 2 用哪种模板引擎 2模板文件放哪儿 1输出什么东西
var consolidate = require(‘consolidate‘)
server.set() 对整个server的全局配置
server.set(‘view engine‘,‘html‘) //输出什么东西
server.set(‘views‘,‘./views‘) //模板文件在哪儿
server.engine(‘html‘,consolidate.ejs) //用哪种模板引擎
######################################################################################
router-路由 把不同的目录对应到不同的模块
var userRouter = express.Router() //迷你server
server.use(‘/user‘,userRouter) //挂载在server下面
userRouter.get(‘/1.html‘,function(req,res){}) //客户访问/user/1.html



。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
数据库 数据库里面不能储存名文密码 加密之后才存 MD5签名算法
MD5给密码签名加密
const crypto = require(‘crypto‘)
var obj = crypto.createHash(‘md5‘)
var 后缀 =‘一串随机符号’
obj.update(‘加密的东西‘+后缀)
str = obj.digest(‘hex‘) 获取16进制的结果
MySQL:
server端
client端
数据基本概念
两种单位
1库:文件夹/用来管理表,本身没法存数据
2表:文件-存储数据的
行:一条数据
列:数据库里面不叫列,叫字段,代表一项数据
主键:唯一的标识符,性能更高
node中的mysql模块 是客户端 两部 1链接服务端2查询
var mysql = require(‘mysql‘)
mysql.createConnection(哪台服务器,用户名,密码,操作哪个库) //链接服务端
mysql.createPool(哪台服务器,用户名,密码,操作哪个库) 链接池
var db =mysql.createConnection({host:‘localhost‘,user:‘root‘,password:‘123456‘,database(数据库名):‘2016222‘,port:‘3036‘})
db.query(干啥,回调函数) //查询
db.query(‘SQL语句‘,function(err,data){})
SQL:结构化查询语句 SQL标准写法 1:关键字大写 2库表字段写反引号
4大查询语句--增删改查
增 INSERT insert into 表 (字段列表) values(值列表)
如 INSERT INTO `user_table` (`ID`,`username`,`password`) VALUES (0,‘chengyuan‘,‘123456‘)
删 DELETE delete from 表 where 条件
改 UPDATE update 表 set 字段=值,字段=值 where 条件

查 SELECT select 什么 from 表 where 条件
如 SELECT * FROM `user_table`
select * from user limit 0,5 从匹配到的数据里面从0条开始 选择5条
WHERR age>=18 AND score>100
WHERR age>=18 OR score>100
ORDER 排序 ORDER BY age ASC升/DESC降
多条件排序 ORDER BY price ASC, sales DESC

GROUP BY 聚类-合并相同的,相同的数据只保留一条,一般配合COUNT(计数)MIN(最小),MAX(最大),AVG(平均值),SUM(总和)一起使用

COUNT() 计数
求每个班的平均分 SELECT class,AVG(score) FROM stundent_table GROUP BY class
求每个班的最高最低分 SELECT class,MIN(score),MAX(score) FROM stundent_table GROUP BY class
class min-score max-score
得到数据是 1 30 100
2 40 99
LIMIT --限制输出 LIMIT 10 前10条 LIMIT 5,8 从第五条开始 要八个



route //相当于小型express 把一个大项目拆分成许多小模块
var route = require(‘express-route‘)




////////////////////


res.json() 给前端传json数据
当路由地址是 ‘user/:id‘ user/100 => req.params.id获取到100


cheerio 可以理解成一个 Node.js 版的 jquery,对语法不明白的先去学下jquery。

redis

node笔记

原文:https://www.cnblogs.com/chengyuanblog/p/9089131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!