Есть ли способ создать динамический частичный результат обработки сервера?

Я начал использовать NodeJS пару месяцев назад и столкнулся с небольшой проблемой с рендерингом партиалов. Я хотел бы включить частичное представление в некоторые шаблоны, но я хочу, чтобы это частичное генерировалось динамически с сервера (потому что это зависит от данных, извлеченных из БД и других вещей).

Я пытался создать помощник шаблона, чтобы сделать это, но так как обработка должна выполняться асинхронно, я не могу получить возврат html для записи в моем шаблоне.

В принципе, что было бы лучше для меня, было бы что-то похожее (этот код не работает, очевидно):

template_file.js

...
<div>
    <%- generatePartial(data) %>
</div>
...

helper_middleware.js

module.exports = function registerAppHelpers(request, response, next)
{
var appHelpers = {};

appHelpers.generatePartial = function generatePartial(data)
{
    if (request.isAuthenticated())
    {
        DB.findOne({ id: request.user.id }, function found(error, obj)
        {
            if (error)
                ...

            if (obj)
            {
                return generatePartial1(data);
            }
            else
            {
                return generatePartial2(data);
            }
        });
    }
    else
    {
        return generatePartial3(data);
    }
};

// Register the helpers as local variables to be accessed within a template.
for (var helper in appHelpers) {
    response.locals[helper] = appHelpers[helper];
}

next();
};

Теперь я могу быть абсолютно не прав относительно того, как я хочу решить эту проблему, поэтому, если у вас есть какие-либо решения / другие предложения по этому поводу, не стесняйтесь.

PS: я использую ExpressJS и EJS.

1 ответ

Я думаю, что вы идете совершенно в неправильном направлении..

  1. Для чего нужен ejs?

ejs - это javascript, встроенный в html, поэтому вы можете создавать динамические html.

  1. поэтому, какая бы у вас ни была логика, просто напишите это в шаблоне ejs и дайте ему все обработать. вам просто нужно передать информацию в движок ejs.

Так что вместо

if (obj)
            {
                return generatePartial1(data);
            }
            else
            {
                return generatePartial2(data);
            }

Я бы предложил захватить все данные

if (obj)
            {
                array1.push(data);
            }
            else
            {
                array2.push(data);
            }
  1. а затем передать всю эту кучу данных в ejs, записать условия и всю логику в файл ejs и позволить ему обрабатывать логику html. например

res.render('template_file.js', { array1: array1, array2: array2 });

Другие вопросы по тегам