Узел JS передает объект JavaScript, который может быть неопределенным, в шаблон pug - PullRequest
0 голосов
/ 12 ноября 2018

Мой маршрут должен передать серию объектов JavaScript в шаблон pug.

router.get('/edit/:itemObjectId', async function(req, res, next) {
    var itemObjectId = req.params.itemObjectId;
    var equipmentCategoryArr = [];
    var lifeExpectancyArr = [];
    var businessUnitResponsibleArr = [];
    var item = undefined;

    try {
        item = await db_item.getItem(itemObjectId);

        // Where item["result"] is either undefined or a JavaScript Object. E.g. {"createdAt":"2018-11-07T04:07:44.587Z","updatedAt":"2018-11-07T04:25:18.526Z","item_name":"GM Portable","manufacturer":"GM"}
        res.render('editItem', {
            title: 'Edit item details', // Give a title to our page
            item: item["result"],
            equipmentCategoryArr: req.app.locals.equipmentCategoryArr,
            lifeExpectancyArr: req.app.locals.lifeExpectancyArr,
            businessUnitResponsibleArr: req.app.locals.businessUnitResponsibleArr
        });
    } catch (err) {
        return Promise.reject(JSON.stringify({ "Error": err }));
    }
});

Где

item["result"] может быть либо неопределенным, либо объектом JavaScript.

На странице editItem.pug мне нужно использовать элемент в JavaScript.

block extraScript
    script.
        console.log(!{JSON.stringify(item)});

Однако, он отображается как "console.log();", если переданный элемент не определен. Так что !{JSON.stringify(item)} вообще не было обработано.

Как я могу проверить, является ли элемент неопределенным или нет на фронте?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете манипулировать этим в трех местах, все используя троичный оператор (condition ? ifTrue : ifFalse)

В маршруте вы можете переключить его с неопределенного на пустой объект

item: item["result"] ? item["result"] : {}

В шаблоне вы можете применить ту же логику:

console.log(!{ item ? JSON.stringify(item) : '{}' } );

Вам нужно будет выполнить одно из двух действий выше, чтобы убедиться, что что-то отображается в клиентском коде, в противном случае вы столкнетесь с синтаксической ошибкой из пустого выражения:

var item = ;
...