美文网首页
express路由/后台(服务端)渲染、前台渲染、浏览器渲染

express路由/后台(服务端)渲染、前台渲染、浏览器渲染

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

express路由

    路由,我觉得吧就是个拦截器,用来拦截用户的请求,执行某项特定的代码;
    使用路由时,一定要提前规划.
    //创建router
        let router = express.Router();//接收express的路由
    //给路由填需要拦截的路径
        router.get('/:id',function (req,res,next){
            res.send('aaa');
            next();
        })
        //此处也支持post,use等方式
    //将路由绑定在父级
        server.use('/article',router);
//核心代码,此处核心代码使用的了node的模块化开发,模块化开发,可以把路由分的特别细.任意函数都可以拿出来做模块;
//server.js -->主文件
        const express = require('express');
        const article = require('./routes/article');//文章路由
        const user = require('./routes/user');//用户路由

        let server= express();
        server.listen(8087);

        server.use('/article',article);//访问/article路径会被文章路由拦截
        server.use('/user',user);
        server.use(function(req,res,=){
            res.send('404');//没被路由拦截的路径,即404;
        })
//article.js --> 文章路由,在routes文件夹下
        let express = require('express');
        let router = express.Router();
        router.get('/:id',function (req,res,next){
            let {id} = req.params;//解构赋值
            //req.query用来获取/article?id=XXX;方式传参的参数ID的值;不常用
           res.send(`${id}`);
            next();
        })
        router.get('/b',function (){
            res.send('bbb');
            
        })
        router.get('/c',function (){
            res.send('ccc');
        })
        module.exports=router;
//user.js --> 用户路由,在routes文件夹下
        let express = require('express');
        let router = express.Router();
        router.get('/a',function (){
            console.log('AAAA');
            
        })
        router.get('/b',function (){
            console.log('BBBB');
            
        })
        router.get('/c',function (){
            console.log('CCC');
        })
        module.exports=router;

后台(服务端)渲染、前台渲染、浏览器渲染

    后台(服务端)渲染 --> 稳定、安全、有利于SEO
    前台渲染 --> 体积更小、用户体验更好
    
    服务端渲染模板引擎 --> ejs、pug
    pug 破坏式框架
    ejs 非破坏式框架
    安装 cnpm i ejs pug -D
//PUG
    引包 const pug = require('pug');
        //pug.renderFile读取模板文件,数据用{},json形式存放
    使用 console.log(pug.renderFile('./template/pug/1.pug',{
            pretty:true,//美化,生产环境不需要
            name:'大佬',//模板中用到的属性
            a:12,
            b:5,
            arr:[1,2,3,4,5]
        }));
        //使用这个模板之后生成了html代码,发送给浏览器之后,即可渲染成页面
    模板文件(1.pug)
        以缩进一级来进行层级显示,可以美化,参数是
            doctype
            html
                head
                    meta(chartset="utf-8")//用括号来表达属性,有多个属性用,分隔
                    script.  //用.来代表这里是多行文本
                        window.onload = function(){
                            alert();
                        }
                body
                    div(class="page main",id="d")//多个class属性
                    div#div.page//可以使用#\.来代表ID跟class
                        li 这里是li的内容//使用空格来代表后面是内容
                        p.
                            ///这里是多行文本
                            ///用.来代表这里是多行文本
                        span 用户名字
                            = name//用=号来代表调用模板时的数据
                            = a+b//可以使用等式
                        ul.ul
                            each a in arr //循环数据arr,a为下标值
                                li=a // =号与li之间不可以有空格
//EJS
    引包 const ejs = require('ejs');
    使用 //ejs是promise,需要使用then();
        ejs.renderFile('./template/ejs/1.html',{
            name:'大佬',//模板中用到的属性
            str:'<尖括号>',
            a:12,
            b:5,
            arr:[1,2,3,4,5],
            path:'path/footer.html'
        }).then(data=>{
            console.log(data);
        },err=>{
        });
    模板文件(1.thml)//非破坏式框架,直接使用html配合<%%>语法即可
        <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>Document</title>
            </head>
            <body>
                <%=a+b%>//输出数据a+b
                <%-str%>//%=会把尖括号转义,使用%-不转义,直接输出<>,主要用在include的时候
                <% for(let i=0;i<arr.length;i++){%>//<%> 可以直接使用js代码
                <li><%=arr[i]%></li>//此处循环输出arr的下标,JS代码可以直接在此处使用,此处如果定义变量在前台是拿不到的,此处为后台JS代码,与前台无关
                <%}%>
                <%- include('path/footer.html')%>//可以直接引用模板,与<% include path/footer.html)%>效果一样
                //此处路径可以使用主文件中的数据参数,
                <%- include(path)%>
            </body>
            </html>

扩展

模块化
    前端模块化
        传统:requireJs-AMD标准、seaJS-CMD标准
            CMD-公共模块定义
            AMD-异步模块定义-使用CMD+异步实现
        现代:vue、react、angular以来webpack打包工具
    后端模块化
        Node模块系统
        写法一:
        mod.js
            exports.a=12;//抛出一个a;
            exports.b=2;//抛出一个b;
        1.js
            let mod = require('./mod');//接收mod.js抛出的模块,防止跟node的全局模块冲突,使用./;
            alert(mod.a);
            alert(mod.b);
        写法二:
        mod.js
            module.exports={a:12,b:2};//批量抛出
        1.js用法同上;

相关文章

网友评论

      本文标题:express路由/后台(服务端)渲染、前台渲染、浏览器渲染

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