You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose中req.params.id网页显示及库存更新问题排查

问题解决指南

1. 在GET路由页面显示req.params.id

你的GET路由/stockIn/:id已能获取req.params.id,只需在渲染页面时将该ID传递给模板引擎即可。

假设使用EJS/Pug这类模板引擎,修改getFlowerStockIn方法:

async function getFlowerStockIn(req, res) {
  const stockId = req.params.id;
  const stock = await Stocks.findOne({ _id: stockId }); // 若用自增ID则替换对应字段
  res.render('stockIn', { 
    stock: stock,
    currentId: stockId // 将ID传入模板
  });
}

之后在模板中直接输出currentId即可(比如EJS中写<%= currentId %>)。

2. POST路由获取req.params.id的问题

当前POST路由/stock-in未定义:id参数,因此无法通过req.params.id获取ID,可通过两种方式解决:

  • 修改POST路由为/stock-in/:id,请求时URL携带ID,即可通过req.params.id获取;
  • 若不想修改路由,在表单中添加隐藏字段传递ID:
<input type="hidden" name="stockId" value="<%= currentId %>">

随后在postStockInAmount方法中通过req.body.stockId拿到ID。

3. 从新建文档改为更新现有库存

将新建Stocks文档的逻辑替换为Mongoose的更新方法,比如findByIdAndUpdate或findOneAndUpdate,假设库存字段为amount,要实现库存数量累加:

async function postStockInAmount(req, res) {
  const stockId = req.params.id || req.body.stockId; // 根据上述方式获取ID
  const addAmount = parseInt(req.body.amount); // 从表单获取待增加的数量

  // 使用findByIdAndUpdate更新库存,$inc用于数值自增
  await Stocks.findByIdAndUpdate(
    stockId,
    { $inc: { amount: addAmount } },
    { new: true } // 可选:返回更新后的文档
  );

  res.redirect(`/stockIn/${stockId}`); // 更新后跳转回库存详情页
}

若使用自定义自增ID(而非Mongo默认_id),则改用findOneAndUpdate,调整查询条件:

await Stocks.findOneAndUpdate(
  { customId: stockId }, // 替换为你的自增ID字段名
  { $inc: { amount: addAmount } },
  { new: true }
);

自增ID实现的注意事项

确保自增ID逻辑避免并发冲突,推荐用计数器集合维护:

// 计数器模型示例
const CounterSchema = new mongoose.Schema({
  model: String,
  count: Number
});
const Counter = mongoose.model('Counter', CounterSchema);

// 获取下一个自增ID的方法
async function getNextSequence(modelName) {
  const counter = await Counter.findOneAndUpdate(
    { model: modelName },
    { $inc: { count: 1 } },
    { new: true, upsert: true }
  );
  return counter.count;
}

// 新建库存时调用
const newStock = new Stocks({
  customId: await getNextSequence('Stocks'),
  // 其他字段...
});
await newStock.save();

内容的提问来源于stack exchange,提问作者Sarge Ole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:20:51