如何在EJS模板中实现数据增减操作?附Mongoose Schema代码
在EJS模板中实现数据减法的解决方案
嘿,我来帮你搞定这个问题~其实在EJS里做数据减法并不复杂,咱们一步步来:
一、先确保数据能传到EJS模板
首先得把Mongoose查询到的库存数据正确传递给模板,先完善你的路由代码:
router.get("/", async (req, res)=>{ try { // 查询所有库存数据 const inventories = await Inventory.find({}); // 把数据传给EJS模板(假设你的模板文件叫inventory.ejs) res.render("inventory", { inventories }); } catch (err) { console.error("查询数据出错:", err); res.status(500).send("服务器出错啦"); } });
二、直接在EJS模板里做减法操作
EJS支持在模板标签里直接写JavaScript算术表达式,不过要注意你的Schema里字段都是数组类型(比如quantity: [Number]),所以得取数组里的元素来计算,示例模板代码如下:
<!-- inventory.ejs 模板内容 --> <div class="inventory-list"> <% inventories.forEach(inventory => { %> <div class="inventory-item"> <h4>商品名称: <%= inventory.name[0] %></h4> <p>原始库存: <%= inventory.quantity[0] %></p> <!-- 示例:计算减去3后的剩余库存 --> <p>剩余库存: <%= inventory.quantity[0] - 3 %></p> <!-- 示例:计算打9折后的价格,保留两位小数 --> <p>折扣价: <%= (inventory.price[0] * 0.9).toFixed(2) %></p> </div> <% }) %> </div>
三、更优方案:后端预处理数据再传模板
如果减法逻辑比较复杂,或者不想让模板里堆太多计算代码,建议在路由里先处理好数据,再传给模板,这样模板更简洁易维护:
router.get("/", async (req, res)=>{ try { const inventories = await Inventory.find({}); // 预处理数据,提前计算好需要的结果 const processedData = inventories.map(item => { // 把Mongoose文档转成普通对象 const obj = item.toObject(); // 自定义减法逻辑,这里示例减去5 obj.remainingQty = obj.quantity[0] - 5; // 计算折扣价并保留两位小数 obj.discountedPrice = (obj.price[0] * 0.9).toFixed(2); return obj; }); res.render("inventory", { inventories: processedData }); } catch (err) { console.error("查询数据出错:", err); res.status(500).send("服务器出错啦"); } });
之后模板里直接用预处理好的字段就行:
<div class="inventory-list"> <% inventories.forEach(inventory => { %> <div class="inventory-item"> <h4>商品名称: <%= inventory.name[0] %></h4> <p>剩余库存: <%= inventory.remainingQty %></p> <p>折扣价: <%= inventory.discountedPrice %></p> </div> <% }) %> </div>
四、重要注意事项
- 修正字段类型:你的Schema里把
name、quantity、price都定义成了数组类型,这大概率不是你想要的,建议改成单个值的定义,避免每次都要写[0]取元素:var InventorySchema = Schema({ name: {type: String, required: true, unique: true}, quantity: Number, code: String, price: Number, stock: {type: Boolean, default: true} }) - 避免NaN报错:做减法前可以加个判断,确保数值存在且有效:
<p>剩余库存: <%= inventory.quantity && !isNaN(inventory.quantity) ? inventory.quantity - 3 : '数据缺失' %></p>
内容的提问来源于stack exchange,提问作者Blinhawk
相关产品推荐
相关产品推荐

