node学习笔记(三)

  • 模板渲染

    • render上下文传参
    router.get('/path',(req,res)=>{
        res.render('tpl',{foo:'bar'});
    });
    

    仅仅适用于传参到当前路由页面

    • res.locals传参
    router.get('/path',(req,res)=>{
        res.locals.foo ='bar';
        res.render('tpl');
    });
    

    适用于多个路由共享参数,优先级低于render上下文传参

  • 公共模板页

    • 默认 layout.hbs

    可将页面全局公共部分(导航栏、页脚等)放于此文件中,示例:

    <!DOCTYPE html>
    <html>
      <head>
        <title>{{title}}</title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
      </head>
      <body>
        {{!-- 导航栏 --}}
        <div>
          <a href="/path1">页面一</a>
          <a href="/path2">页面2</a>
        </div>
        {{{body}}}
      </body>
    </html>
    
    
    • 设置特定模板页

      新建模板页layout2.hbs,使用render方法渲染页面时,设置layout参数为layout2地址

      router.get('/path',(req,res)=>{
          res.render('tpl',{layout:'模板path'});
      });
      
  • 中间件:请求、响应对象预处理函数

    通常情况下,客户端或浏览器发送一个请求到服务器后,获取请求参数、记录日志、cors跨域处理等都是非常常见的预处理操作。

    express为我们提供了很多中间件,其中需要注意的是,路由中间件一般注册在所有中间件的最后,路由的先后顺序也需要注意,前面的路由优先级比后面路由的优先级高的话,后面的路由永远都匹配不到。

    app.use(logger('dev'));   //日志
    app.use(express.json());  //获取ajax传递json
    app.use(express.urlencoded({ extended: false }));  //解析url参数
    app.use(cookieParser());  //cookie解析
    app.use(express.static(path.join(__dirname, 'public'))); //设置静态目录
    
    app.use('/xx', xxx);
    

    自定义中间件

    根目录下新建middleware目录,并在该目录下新建Index.js文件,添加以下内容

    module.exports.middlewareName = function (req,res,next){
        //中间件操作
        //....
        next(); //进入后续中间件
    }
    

    如果当前的中间件函数没有结束请求 - 响应周期,它必须调用next()将控制权传递给下一个中间件函数。否则,请求将被挂起

    app.js中引入自定义中间件,放置于express中间件和路由中间件之间

    //引入中间件
    const {middlewareName} = require('./middleware');
    
    //...
    
    app.use(logger('dev'));   //日志
    app.use(express.json());  //获取ajax传递json
    app.use(express.urlencoded({ extended: false }));  //解析url参数
    app.use(cookieParser());  //cookie解析
    app.use(express.static(path.join(__dirname, 'public'))); //设置静态目录
    
    //注册自定义中间件
    app.use(middlewareName);
    
    app.use('/xx', xxx);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值