express

作者: 子心_ | 来源:发表于2019-07-10 09:10 被阅读0次

    express (非破坏式框架,不影响node原生方法的使用)

    //安装
            cnpm init
            cnpm i express -D
    //使用
            const express = require('express');
            let server= express();
            server.listen(8087);
    
            //此时方法有get\post\use(get\post方法都认可,也可以用来使用中间件)
            server.get('/a',function (req,res){
                console.log('aaaaa');
                //express是一个非破坏式的框架,node原生方法几乎都可以用
                res.write('NB');
                res.end();
    //res.send(any),可以发送任意的参数,数组,json等
                //express的方法,不需要使用res.end().
                res.send('[1,2,5,3]');//send可以发送数组 json等.而原生的不支持
            })
    //express中间件(插件) 使用use();
            //静态文件,访问的文件会自动去www/文件夹下找.
            //例:localhost:8087/1.html;该中间件会自动去www/文件夹下寻找1.html并按照gzib格式返回,
            server.use(express.static('www/'));
    //express流水线
            //流水线工作,利用next()让/a的访问执行到第二次的使用中;如果不使用next()就会只执行第一次;
             server.get('/a',function (req,res,next){
                console.log('aaaaa');
                next();
            })
             server.get('/a',function (req,res){
                console.log('bbbbbb');
            })
    //express解析绝对路径,pathlib.resolve获取绝对路径
    //res.sendFile(绝对路径)
            let pathlib = require('path');
            server.get('/a',function (req,res){
                res.sendFile(pathlib.resolve('a.txt'));
            })     
    //express返回状态码
            res.sendStatus(404);
    //express重定向
            res.redirect('https://www.baidu.com');
    //express 数据交互
        //get数据,使用req.query
             server.get('/a',function (req,res){
                console.log(req.query);//req.query就是处理好的get数据
            })
        //普通post数据,使用中间件body-parser
            //安装cnpm i body-parser -D
            const body = require('body-parser');
            //使用body-parser;
            server.use(body.urlencoded({extended:false}));//extended扩展识别模式为flase
            server.post('/a',function (req,res){
                console.log(req.body);//req.body是body-parser中间件解析得到的;
            })
        //文件post数据,使用中间件multer
            //安装cnpm i multer -D
            const multer = require('multer');
            let multerObj = multer({dest:'./file/'});//文件接收后放置的路径
            server.use(multerObj.any());//将multer加到服务器上,any()声明允许接收所有文件
            server.post('/a',function (req,res){
                console.log(req.files);  //文件POST数据multer带来的files
            })
    //express中间件原理(详见server6-3.js)
        //因代码执行顺序是自上而下流水线式执行;
        //写一个函数,使用原生的node代码去处理数据
        //创建新的JS文件,使用
            module.exports = (req,res,next)=>{
                req.body={a:12,b:5};//真实场景,此处需要使用原生的node代码去处理数据;
                next();
            };//将此函数抛出;
        //在主服务器文件中引入上一步新建的文件;let body = require('./xxx.js');
        //调用server.use(body);即可实现自定义的中间件
        //部分代码-------
            server.use((req,res,next)=>{
                req.body={a:12,b:5};//真实场景,此处需要使用原生的node代码去处理数据;
                next();
            })
            server.post('/a',function (req,res){
                console.log(req.body);//req.body即上面代码添加的,上面的代码被称为中间件
            })
    //cookie与session(中间件)
        //cookie 存在浏览器;容量有限--4k;安全性低;
        //session 存在服务器;容量极大;安全性高;
        //服务器发送带有sessionID的cookie给浏览器,以便用来识别身份
        //安装 cookie-parser 与 cookie-session;
            cnpm i cookie-parser cookie-session -D
        //使用cookie-parser
            const cookieParser = require('cookie-parser');
            server.use(cookieParser('myKey'));//myKey是自己设置的防伪签名,任意的字符串
            server.get('/a',function(req,res){
                consloe.log(req.cookies);//此处输出全部的浏览器cookies,不包括带签名的cookie
                consloe.log(req.signedCookies);//此处输出带签名的cookie
                res.cookie('b',5,{});//此处设置一个普通cookies;
                res.cookie('c',51,{signed:true});//此处设置一个签名cookies;
            })
        //使用cookie-session
            const cookieSession = require('cookie-session');
            server.use(cookieSession({
                keys:['aaa','bbb''ccc'],//可以给多个秘钥
                //secret:'xxx',//也可以设置单独的秘钥
            }));
            server.get('/a',function(req,res){
                //req.session是个对象
                if(!req.session['count']){
                    req.session.count=1;
                }else{
                    req.session.count++;
                }
                res.send(req.session.count);//可以记录登陆次数
            })
    

    相关文章

      网友评论

          本文标题:express

          本文链接:https://www.haomeiwen.com/subject/rwvtkctx.html