express

2019-07-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);//可以记录登陆次数
        })
上一篇下一篇

猜你喜欢

热点阅读