如何在sails.js> v1.0中使用动态页面标题?

时间:2018-11-28 13:22:30

标签: sails.js

最近几天,我一直在寻找一种可行的解决方案,以优化sails.js布局文件(例如<title>SOME_TITLE</title>)中的HTML页面标题layout.ejs,该文件默认情况下使用静态页面标题。
显然,最好具有动态页面标题,例如仪表板,购物车等...
其他人之前一直在寻找此答案,并在Solution 1Solution 2Solution 3中获得了先前帆版本的答案。 不幸的是,它们似乎都不适合最新版本的sails.js(截至本文)。

Solution 1朝着正确的方向前进,并提出了我所寻找的建议。但是您必须为每个控制器定义一个title并将其传递到视图中。否则您将获得

  

标题未在eval定义

那么如何定义默认情况下每个控制器/视图中都可以访问的局部变量?

2 个答案:

答案 0 :(得分:2)

以下是当前sails.js版本的一个可行的完整解决方案:

在您的layout.ejs文件中定义一个这样的动态页面标题

<head>
  <title>
    <%= title %>
  </title>
  ...
</head>
...

创建一个新的自定义钩子,例如api/hooks/dynamic-page-title/index.js

module.exports = function dynamicPageTitleHook(sails) {

  return {
    routes: {
      /**
       * Runs before every matching route.
       *
       * @param {Ref} req
       * @param {Ref} res
       * @param {Function} next
       */
      before: {
        '/*': {
          skipAssets: true,
          fn: async function(req, res, next){
            // add page title variable to each response
            if (req.method === 'GET') {
              if (res.locals.title === undefined) {
                res.locals.title = 'plusX';
              }
            }
            return next();
          }
        }
      }
    }
  };

};

现在,在每个应该使用自定义页面标题的控制器中覆盖页面标题,例如view-login.ejs

module.exports = {


  friendlyName: 'View login',


  description: 'Display "Login" page.',


  exits: {

    success: {
      viewTemplatePath: 'pages/entrance/login',
    },

    redirect: {
      description: 'The requesting user is already logged in.',
      responseType: 'redirect'
    }

  },


  fn: async function (inputs, exits) {

    if (this.req.me) {
      throw {redirect: '/'};
    }

    return exits.success({title: 'Login'});

  }


};

答案 1 :(得分:0)

"terminal.integrated.shell.linux": "/run/host/usr/bin/zsh"

例如:返回(标题:“首页”)