【问题标题】:Dynamically pick values from req.body based on database attributes根据数据库属性从 req.body 中动态选择值
【发布时间】:2018-07-27 10:04:49
【问题描述】:

我正在使用 Node/EJS/Mongo 构建一个应用程序,其中用户正在构建能力调查,并且需要为每个问题设置所需的级别。他们用来选择关卡的表格有一系列看起来像这样的选择:

<select class="form-control col-sm-4" id="<%=capability.capabilityId%>" name="<%=capability.capabilityId%>">
   <option value=1>Developing</option>
   <option value=2>Intermediate</option>
   <option value=3>Advanced</option>
   <option value=4>Role Model</option>
</select>

当用户随后提交此表单时,我想更新评估以加载这些预期级别。

我的 mongodb 中的评估架构如下所示:

var assessmentSchema = new mongoose.Schema ({
  title: String,
  startDate: Date,
  endDate: Date,
  behaviours: [{
    behaviourName: String,
    behaviourId: String,
    order: Number,
    capabilities: [{
      orderCap: Number,
      capabilityId: String,
      capabilityName: String,
      capabilityDesc: String,
      developing: String,
      intermediate: String,
      advanced: String,
      roleModel: String,
      expectedLevel: Number,
      motivation1: String,
      motivation2: String,
      motivation3: String,
      motivation4: String,
      motivation5: String
    }]   //capabilities object
  }],
  targetEmployees:[{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Users"
  }]  //behaviours object
});

我在想的是我想遍历所有功能,在req.body 中找到名称与capabilityId 匹配的条目,然后更新desiredLevel。我只是看不出如何使它工作。我的路线代码目前看起来像:

router.put(':id/levels', function(req, res) {
  Assessment.findById(req.params.id, function(err, foundAssessment) {
    foundAssessment.behaviours.forEach(function(b) {
      b.capabilities.forEach(function(c) {
        c.expectedLevel = req.body.SOMETHINGHERE
      });
    });

    foundAssessment.save(function(err) {
      if (err) {
        console.log(err);
        req.flash("error", err.message);
        res.redirect("back");
      } else {
        // Send json back to xhr request
        res.json(foundAssessment);
      }
    });
  });
});

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    你可以像这样读取请求体动态属性:

    req.body[variable];
    

    【讨论】:

    • 如此简单!非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多