• [Node.js] Provide req.locals data though middleware


    We can create Template Helpers, which can contains some common reuseable data and libs.

    /*
      This is a file of data and helper functions that we can expose and use in our templating function
    */
    
    // FS is a built in module to node that let's us read files from the system we're running on
    const fs = require('fs');
    
    // moment.js is a handy library for displaying dates. We need this in our templates to display things like "Posted 5 minutes ago"
    exports.moment = require('moment');
    
    // Dump is a handy debugging function we can use to sort of "console.log" our data
    exports.dump = (obj) => JSON.stringify(obj, null, 2);
    
    // Making a static map is really long - this is a handy helper function to make one
    exports.staticMap = ([lng, lat]) => `https://maps.googleapis.com/maps/api/staticmap?center=${lat},${lng}&zoom=14&size=800x150&key=${process.env.MAP_KEY}&markers=${lat},${lng}&scale=2`;
    
    // inserting an SVG
    exports.icon = (name) => fs.readFileSync(`./public/images/icons/${name}.svg`);
    
    // Some details about the site
    exports.siteName = `Now That's Delicious!`;
    
    exports.menu = [
      { slug: '/stores', title: 'Stores', icon: 'store', },
      { slug: '/tags', title: 'Tags', icon: 'tag', },
      { slug: '/top', title: 'Top', icon: 'top', },
      { slug: '/add', title: 'Add', icon: 'add', },
      { slug: '/map', title: 'Map', icon: 'map', },
    ];

    Then you can define a locals data in middleware:

    Require helper file:

    const helpers = require('./helpers');
    // pass variables to our templates + all requests
    app.use((req, res, next) => {
      res.locals.hlp = helpers;
      res.locals.flashes = req.flash();
      res.locals.user = req.user || null;
      res.locals.currentPath = req.path;
      next();
    });

    Then in the pug file, you can use those locals variable:

    extends layout
    
    block content
        h2 Sale ends in #{hlp.moment().endOf('day').fromNow()}
  • 相关阅读:
    内置函数(十)
    常用命令
    函数式编程(九)——map,filter,reduce
    函数(八)-函数和匿名函数
    设计模式(十三)——观察者模式
    Confluence 6 重要缓存和监控
    Confluence 6 数据中心的缓存
    Confluence 6 配置文件和key
    Confluence 6 缓存性能示例
    Confluence 6 缓存性能优化
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6995028.html
Copyright © 2020-2023  润新知