node笔记

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(文件名,要写的内容,回调函数)  写文件  回调函数有一个参数  errfs.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. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户.......................................................................................EventsEmittervar EventsEmitter = require('events').EventsEmittervar 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获取到100cheerio 能够理解成一个 Node.js 版的 jquery,对语法不明白的先去学下jquery。redis
相关文章
相关标签/搜索