我的路由需要将一系列 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/