Nodejs Express个人笔记

express 非破坏性框架

const express=require('express');

let server=express();
server.listen(3000,function () {
    console.log('server start')
})

server.get('/get',(req,res)=>{})
server.post('/post',()=>{})
server.use('/use',()=>{})
//通吃
server.get(()=>{})      
server.post(()=>{})
server.use(()=>{})

//非破坏性
server.get('/get',(req,res)=>{
    res.write('字符串');
    res.send({a:12,b:14});
})

中间件-插件:
1.插件-补充框架功能
2.流水线    重用    分工    next    顺序

server.use(express.static('www/')   //静态目录

server.use(next)=>{ next(); })
server.get('/get',(next)=>{ next(); })
server.get('/get',()=>{})
response
res.send(any);
res.sendFile(绝对路径)      //灵活
    path.resolve(www/aaa)   //解析为绝对路径
res.sendStatus(404)         //状态码
    等价于=> res.writeHeader(404);
             res.write('Not Found');
             res.end();
res.redirect('http://www.baidu.com')    //重定向
    等价于=> res.setHeader('location','http://www.baidu.com');
             res.writeHeader(401);
             res.end();

数据交互
get:
    req.query
普通post:
    let bodyParser = require('body-parser')
    server.use(bodyParser.urlencoded({extended:false}));
    req.body;
文件post:
    const multer=require('multer'); 
    server.use(multer({dest:'upload/'}).any()); 
    req.files;

cookie
1.存在浏览器里
2.容量有限---4K
3.不安全---用户、浏览器
    1.防篡改
    2.加密

const cookieParser = require('cookie-parser');
server.use(cookieParser('zzzzzzzzz'));

req.cookies                             //接受
res.cookie('name','value',options);     //发送
//签名防篡改
req.signedCookies                       //接受带签名
res.cookie('test',555,{ signed:true }); //发送
session
存在服务器里
容量不用担心
安全---用户完全看不到
cookie-session 不能跨域
    const cookieSession = require('cookie-session');
    server.use(cookieSession({
        keys:['zzzzz','xxxxxx','cccccc'],   //循环密钥
        secret:'xxx'                        //单个密钥
    }));
    //小例子
    server.get('/get', (req,res)=> {
    if(!req.session['count']){
        req.session.count=1;
    }else {
        req.session.count++;
    }
        res.send(`欢迎你第${req.session.count}次访问页面`)
    })
session劫持
sess_id拿走:   
    1.session定期更换ID---有效期
    2.签名

路由:根据地址不同,调用不同代码
//index.js
    server.use('/aritcle',require('./routes/article'));
    server.use('/user',require('./routes/user'));
    
    server.use((req,res)=>{
        res.send('404你懂的!')
    })
//router/aritcle.js
    const express = require('express');
    const router=express.Router();
    
    router.get('/',()=>{});
    router.get('/:id',(req,res)=>{
        const {id}=req.params;
        console.log(req.params);
        res.send(`${id}文章内容`);
    });
       
    router.post('/:id/comment',()=>{});
    router.use('/aaa',require('./aaa'));
    
    module.exports= router;
//router/aaa.js
    const express = require('express');
    const router=express.Router();
    
    router.get('/a',require('./aaa/a'));
    
    module.exports= router;
//router/aaa/a.js
    module.exports=(req,res)=>{
        res.send('a!')
    }
/user/123123    //对路由友好、利于SEO 、SPA
    req.params
/user?id=123132
    req.query

服务端渲染
后端渲染(组装):html生产出来
    稳定、安全、利于SEO
前端渲染(组装):html生产出来
    体积更小、灵活、体验好
浏览器渲染:
    输入url =》加载 =》html,css,js,img... =>渲染
    
    渲染和性能关系

pug 破坏式---破坏HTML

缩进规定层级
const pug=require('pug');
pug.renderFile('./template/pug/1.pug',{
    pretty:true,
    name:123,
    a:1,
    b:3,
    arr:[1,2,3,4,5]
});
//template/pug/1.pug
doctype
html
    head
        meat(charset='utf-8')
        link(rel='stylesheet',href='//www.greatytc.com/css/main.css')
        script(src='main.js')
        script.
            window.onload=function (ev) {
                let div=document.getElementById('div1');
                div.onclick=function (ev1) { alert('a'); }
            }
    body
        div.page.main#div1
            ul.list
               each a in arr
                li= a
            p.
                sad
                asd
            span 用户:
                = name
                = a+b

ejs 非破坏式---保留HTML结构 <% %>

    const ejs=require('ejs');
    ejs.renderFile('./template/ejs/ejs.html',{
        a:1,b:2,str:'我叫<span><span>',header_path:'component/header.html',
    }).then(data=>{
        console.log(data)
    }).catch(err=>{
        console.log(err)
    })
//template/ejs/1.html
    //输出<%= %>转义输出
    //<%- %>非转义输出
    <%=a+b %>   //3
    <%=str %>   //我叫&lt;span&gt;&lt;span&gt;
    <%-str %>   //我叫<span><span>
    % for(let s in arr ){%>
        <li><%=s %></li>
    <% }%>
    <%- include(header_path)%>

模块化
*所有的语言(除JS之外)都有模块系统
1.前端:
    传统---requireJS-AMD、seaJS-CMD
        CMD---公共模块定义
            命名空间
        AMD---异步模块定义
            CMD+异步
    现代---vue、angular、react
2.后端
    Node模块系统
    exports.a=1;
    exports.b=2;
    module.exports={ a:1,b:2 }
    const mod=require('./mod')  //自定义、相对路径
WebPack---模块打包工具
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容