node—express

express

  • 安装
  • 配置
  • 接收请求
  • 响应

简单的服务器 08express1/server.js

    const express = require('express');

    var server = express();//建立服务
    //请求根目录执行

    server.use('/a.html',function(req,res){
        res.send('aaa');
        res.end();
    });
    server.use('/b.html',function(req,res){
        res.send('bbb');
        res.end();
    });

    server.listen(8080);//监听

req res 原来的方法还有。只是新增了一些东西,好比write,end

    //send能够直接返回 json
    server.use('/a.html',function(req,res){
        res.send({a:1,b:2});
        res.end();
    });

小结

  • 建立服务 var server = express();
  • 处理请求 server.use(地址,function(req,res){})
  • 监听 server.listen(8080);

3种接收用户请求的方法 08express1/server1.js

职匹配一个css

  • get请求: get('/',function(req,res){})
  • post请求: post('/',function(req,res){})
  • request: use('/',function(req,res){})

响应文件 08express1/server2.js

  • express-static:html

    npm install express-static
    
  • 08express1/server2.jsnode

    const express = require('express');
    const expressStatic = require('express-static');
    var server = express();
    
    server.listen(8080);
    
    //指定去哪儿读 静态文件
    server.use(expressStatic('./www'));
    
    // localhost:8080/a.html
    

接口 08express1/server3.js

  • /login?username=yuonly&pwd=123
  • 返回: {"ok":true,"msg":"成功"}mysql

  • 获取参数 req.querygit

            var users ={
                'yuonly':'123123',
                'zhangsan':'666',
                'lisi':'999'
            }
            server.get('/login',function(req,res){
                //直接获取get参数的对象
                var username = req.query['username'];
                var pwd = req.query['pwd'];
                if(users[username]==null){
                    res.send({ok:false,msg:'用户不存在'});
                }else{
                    if(users[username]!=pwd){
                        res.send({ok:false,msg:'用户名密码错误'});
                    }else{
                        res.send({ok:true,msg:'登陆成功'});
                    }
                }
            })
    
            // http://localhost:8080/login?username=lisi&pwd=123
    

数据处理 09express2/server.js 09express2/form.html

1 get: req.query

2 post: req.body

    安装 bodyparser
    npm install body-parser

    引入模块
    const bodyParser = require('body-parser');
    定义urlencoded中间件
    server.use(bodyParser.urlencoded({}));
    server.post('/',function(req,res){
        从req.body中读取post数据
        console.log(req.body);
    })

小结

  • get: 无需中间件 req.query
  • post: 须要 body-parser中间件sql

        server.use(bodyParser.urlencoded({
            extended:true,//启用扩展模式,意义不大
            limit:2*1024//限制 默认100k
        }));
    
        req.body
    

中间件:使用、写、链式操做

链式操做 09express2/server1.js

    server.use('/',function(req,res,next){
        console.log('aaa');
        next();
    })

    server.use('/',function(req,res,next){
        console.log('bbb');
    })

本身定义一个body-parser中间件的功能 09express2/server2.js

        server.use(function(req,res,next){
            var str = '';
            req.on('data',function(data){
                str += data;
            })
            req.on('end',function(){
                //解析事后的数据,绑定到req.body身上
                req.body = querystring.parse(str);
                //next后,在下面匹配的中间件仍然能够接收到 req.body的数据
                next();
            })
        })

        server.use('/',function(req,res){
            console.log(req.body);
        })

封装本身的body-parser

1 09express2/lib/my-body-parser.js
        const querystring = require('querystring');

        module.exports = function(req,res,next){
            var str = '';
            req.on('data',function(data){
                str += data;
            })
            req.on('end',function(){
                req.body = querystring.parse(str);
                next();
            })
        }
2 在 09express2/server3.js 中使用
        const express = require('express');
        const bodyParser2 = require('./libs/my-body-parser.js');
        var server = express();
        server.listen(8080);
        server.use(bodyParser2);
        server.use('/',function(req,res){
            console.log(req.body);
        })
3 使用 09express2/form.html 测试

session、cookie

  • cookie: 在浏览器保存一些数据,每次向服务器发起请求都会带过来数据库

    不安全、存储空间小(4K)express

  • session: 保存在服务端,但session依赖cookienpm

    更安全json

    cookie中会有一个sessionid的ID,服务器根据cookie带过来的sessionid找到服务器端与之对应的文件,进行读取或写入
    

cookie 10cookie-session/server.js

        cnpm install express express-static cookie-parser cookie-session
  • 读取-cookie-parser
  • 发送 res.cookie('user','yuonly',{path:'/aaa',maxAge:30*24*3600*1000});
  • 加密 10cookie-session/server2.js

        req.secret = 'yuonly123123123';
        res.cookie('user','yuonly',{signed:true});
    

读取及发送小例子 10cookie-session/server2.js

        const express = require('express');
        var server = express();
        //cookie
        const cookieparser = require('cookie-parser');
        server.use(cookieparser());

        server.use('/aaa/a.html',function(req,res){
            //读取cookie 装完cookie-parser后有这个属性
            console.log(req.cookies,'read');
            //发送cookie
            res.cookie('user','yuonly',{path:'/aaa',maxAge:30*24*3600*1000});
            res.send('ok');
        })

        // http://localhost:8080/aaa/a.html

        server.listen(8080);

小结

  • 发送

    res.sercet = 'sjksdjfkl123';
    res.cookie(名字,值,{path:生效路径,maxAge:有效期,signed:是否须要签名})
    
  • 读取cookie

    cookie-parser
    service.use(cookieParser(签名))
    service.use(function(req,res){
    
        req.cookies;
        req.signedCookies;
    })
    
  • 删除

    res.clearCookie(key)
    
  • 扩展--加密 cookie-encrypter

session 10cookie-session/server3.js

  • cookie-session
1 读取
        server.use(cookiesession({
            //session要有效,必须设置keys。
            keys:['111','2222','3333','4444','555']
        }));

        if(req.session['count']==null){
            req.session['count'] = 1;
        }else{
            req.session['count']++;
        }
        console.log(req.session['count']);
        res.send('ok');

        res.end();
2 写入
    req.session['count'] = 1;

模板引擎

  • jade-破坏式、侵入式、强依赖
  • ejs-非侵入式的,不破坏原有的html、css

ejs

  • 安装

    cnpm install ejs
    

1 11ejs/1.js

    const ejs = require('ejs');
    //              模板            数据             
    ejs.renderFile('./view/1.ejs',{name:'yuonly'},function(err,data){
        console.log(data);
    });

2 11ejs/view/1.ejs

    <div>
      <%= name %>
    </div>

ejs 循环数据

1 11ejs/2.js

    const ejs = require('ejs');

    ejs.renderFile('./view/2.ejs',{json:{arr:[{username:'yuonly'},{username:'xiaowang'}]}},function(err,data){
        console.log(data);
    });

2 11ejs/view/2.ejs

    <% for(var i=0;i<json.arr.length;i++){ %>
      <div>
        <%= json.arr[i].username %>
      </div>
      <% } %>

ejs中非转义输出 <%- %>

1 11ejs/view/3.ejs

    <% var str = '<div></div>'; %>
    // html实体
      <%= str %>
      // html标签自己
        <%- str %>

express整合到一块儿 012expressall

  • 主体
  • cookie、session
  • 数据
  • 模板引擎

1 安装相关包

    cnpm install express express-static cookie-parser cookie-session body-parser ejs --save

2 目录说明

  • libs:第三方模块
  • views:模板
  • www:网站根目录
  • server.js: express服务器

bodyparser弊端,只能解析post数据,不能处理post上来的文件

文件上传测试 12expressall/server_file.js post.html

1 body-parser

只能获取上传文件的文件名.form表单 加上 enctype以后,干脆没东西了。

server_file.js
        const express = require('express');
        const bodyParser = require('body-parser');
        var server = express();
        server.use(bodyParser.urlencoded({extended:false}));
        server.post('/',function(req,res){
            console.log(req.body);
        })
        server.listen(8080);
post.html
        <form action="http://localhost:8080" method="post" enctype="multipart/form-data">
          文件: <input type="file" name="username" id=""> <br>
          <input type="submit" value="上传">
        </form>

2 multer 用来处理文件上传 12expressall/server_multer.js

        //1 安装
        cnpm install multer --save
        //2 导入
        var multer = require('multer');
        //3 建立multer对象
        var objMulter = multer({dest:'./www/upload/'});
        //4 使用对应方法,any 上传多文件
        server.use(objMulter.single('f1'));

        server.post('/',function(req,res){
            //5 获取上传文件
            console.log(req.files);
            // [ { fieldname: 'username',
            // originalname: '屏幕快照 2017-05-30 上午8.12.11.png',
            // encoding: '7bit',
            // mimetype: 'image/png',
            // buffer: <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 10 00 00 01 94 08 06 00 00 00 fd 2b 7d db 00 00 01 5e 69 43 43 50 49 43 43 20 50 72 6f 66 69 ... >,
            // size: 160018 } ]
        })

3 发现上传后的文件没有扩展名,因此须要用fs模块对该文件进行重命名 12expressall/rename.js a.txt

4 若是要对上传文件重命名,还须要知道原来文件的路径等信息,使用path。12expresssall/path.js


文件上传小结

  • body-parser :用来解析post数据
  • multer:用来解析文件的数据 enctype="multipart/form-data"

        //1 multerObj
        var obj = multer({dest:'upload'});
        //2 设定上传方法
        server.use(obj.any());
        //3 使用
        server.use('/',function(req,res,next){
            <!-- req.files -->
            //4.新的文件名
            var pathObj = pathLib.parse(req.files[0].originalname);
            var newName = req.files[0].path + pathObj.ext;
            //5.重命名 req.files[0].path
            fs.rename(req.files[0].path,newName,function(err){
                if(err){
                    res.send('上传失败');
                }else{
                    res.send('成功');
                }
            })
        })
    

consolidate-适配各类模板引擎

        cnpm install consolidate --save

配置模板引擎

  • 输出什么东西

    server.set('view engine','html');
    
  • 模板文件放在哪儿了

    server.set('views','./views');
    
  • 我要用哪一种模板引擎

    server.engine('html',consolidate.ejs);
    

路由 13express_consolidate/server_route.js

至关于子服务器 server

    //1.建立router
    var routeUser = express.Router();
    //2.把router添加到server
    server.use('/user',routeUser);
    //3.router内部的路由的定义
    routeUser.get('/1.html',function(req,res){
        res.send('user1');
    })
    routeUser.get('/2.html',function(req,res){
        res.send('user222');
    })



    //localhost:8080/user/1.html
    //localhost:8080/user/2.html

mysql 14mysql

  • 关系型: mysql、oracle
  • 非关系型-文件型: mongo

Server端:存数据 Client端:管理工具、Node


Server安装 官网下载安装

基本概念

1 库:文件夹
2 表:excel文件
行: 一条数据
列:(字段、域) 一个数据项

客户端安装

    cnpm i mysql --save

使用nodejs 连接mysql

        const mysql = require('mysql');
        //1.连接数据库
        // mysql.createConnection(哪台服务器,用户名,密码,库名);
        var db = mysql.createConnection({
            host:'localhost',
            user:'root',
            password:'root',
            database:'jy1608_blog',
            port:8889
        });
        //2.查询
        db.query("SELECT * FROM `user`;",function(err,data){
            if(err){
                console.log(err);
            }else{
                console.log(data,'data');
            }
        })
相关文章
相关标签/搜索