节点JS传递可能无法定义到pug模板的JavaScript对象

时间:2018-11-12 03:07:16

标签: javascript node.js express pug

我的路线需要将一系列JavaScript对象传递给哈巴狗模板。

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 :(得分:1)

您可以使用三元运算符(condition ? ifTrue : ifFalse)在三个位置进行操作

在路线中,您可以将其从未定义状态切换为空对象

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

在模板中,您可以应用相同的逻辑:

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

您将需要执行以上两项操作之一,以确保某些内容已呈现到客户端代码中,否则,您将面临来自空表达式的语法错误:

var item = ;