最近几天,我一直在寻找一种可行的解决方案,以优化sails.js布局文件(例如<title>SOME_TITLE</title>
)中的HTML页面标题layout.ejs
,该文件默认情况下使用静态页面标题。
显然,最好具有动态页面标题,例如仪表板,购物车等...
其他人之前一直在寻找此答案,并在Solution 1,Solution 2和Solution 3中获得了先前帆版本的答案。
不幸的是,它们似乎都不适合最新版本的sails.js(截至本文)。
Solution 1朝着正确的方向前进,并提出了我所寻找的建议。但是您必须为每个控制器定义一个title
并将其传递到视图中。否则您将获得
标题未在eval定义
那么如何定义默认情况下每个控制器/视图中都可以访问的局部变量?
答案 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"
例如:返回(标题:“首页”)