javascript - Node JS 将可能未定义的 JavaScript 对象传递给 pug 模板

标签 javascript node.js express pug

我的路由需要将一系列 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)} 根本没有被渲染。

如何在前端检查项目是否未定义?

最佳答案

您可以在三个地方操作它,全部使用三元运算符(condition ?ifTrue : ifFalse)

在路由中你可以将其从未定义状态切换为空对象

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

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

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

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

var item = ;

关于javascript - Node JS 将可能未定义的 JavaScript 对象传递给 pug 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53255483/

相关文章:

javascript - 如何访问传递给下一页的参数

node.js - npm 删除失败的安装模块

node.js - 读写 process.env 值是同步的吗?

javascript - 使用 multer 转发上传图像请求(javascript,express)

javascript - Jade模板,扩展模板后添加到头部

express - type-graphql 找不到模块 'class-validator' 异常

javascript - 获取从当前位置(地理位置)到预定义目的地的路线

javascript - 对预检请求的响应未通过访问控制检查

c# - ASP 从 C# 调用 javaScript

node.js - Firebase 堆栈 "Error: too many index entries for entity"