Использование предопределенных данных модели в представлениях паролей Keystonejs - PullRequest
0 голосов
/ 27 декабря 2018

В настоящее время я создал модель трапецеидального искажения в следующем формате:

var keystone = require('keystone');

var SiteSettings = new keystone.List('SiteSetting', {
    map: { name: 'siteName' },
    nocreate: true,
    noedit: false,
    nodelete: true,
    singular:'SiteSetting',
    plural: 'SiteSetting',
});

SiteSettings.add({
    siteName: { type: String, required: true },
    contactNumber: { type: String, required: false },
    facebookGroupUrl: { type: String, required: false },
    googlePlusUrl: { type: String, required: false }
});

SiteSettings.register();

Затем я перешел к фону трапецеидального искажения, создал новый объект настройки сайта.

И на моем шаблоне по умолчаниюЯ использую частичное представление следующим образом:

<body>
  <main>
    {{>header}}
    {{>footer}}
  </main>
</body>

И это мой частичный нижний колонтитул:

<div class="row">//I want to print my site name here</div>

Но я понятия не имею, как можно получить данные модели без маршрута.Потому что это частичное представление.

Есть идеи?что я должен делать ?Могу ли я что-нибудь сделать в middleware.js

Спасибо всем.

1 Ответ

0 голосов
/ 24 марта 2019

Да, вы можете загрузить глобальные настройки сайта в промежуточное программное обеспечение.

// routes/middleware.js

exports.initLocals = (req, res, next) => {
  const { locals } = res;

  // Load site settings from db
  keystone.list('SiteSettings').model.findOne().exec((err, result) => {
    locals.siteSetting = result;
    next(err);
  });
};

// routes/index.js

const { initLocals } = require('./middleware');
keystone.pre('routes', initLocals);

Затем вы можете использовать siteName в нижнем колонтитуле.

<div class="row">{{ siteSetting.siteName }}</div>
...