如何填充数组,并通过用户输入将其发布到Mongoose模式中

时间:2019-01-22 10:32:58

标签: javascript html mongoose handlebars.js mongoose-schema

我要让用户输入二十个球员名称,球衣号码和位置;然后将这些响应组装成一个数组;然后将该数组插入到Mongoose模式中的数组对象中。

我尝试过使用for for var i = 1迭代循环来收集所有它们,但是没有成功。我什至无法在该循环中触发console.log命令。

表达server.js app.post路线:

app.post('/create', (req, res) => {
console.log('Post command received');
console.log(req.body);
console.log(req.body.player1Name);

var players = [];
    for (var i = 0; i < "req.body.player" + i + "Name".length; i++){
        players.push({"playerName": "req.body.player" + i + ".Name", playerNumber: "req.body.player" + i + ".Number"});
        console.log("This is players: " + players);
    }
    console.log("This is players: " + players + " 2");
var newTeam = new Team({
    // POSTMAN SETUP BELOW
    // "team": req.body.team[0],
    // "teamName": req.body.team[0].teamName,
    // "shortTeamName": req.body.team[0].shortTeamName,
    // "teamRoster": req.body.team[0].teamRoster,
    // "teamCoach": req.body.team[0].teamCoach

    // WEB SETUP BELOW
    "team.teamRoster.teamCoach": req.body.coachName,
    "team.shortTeamName": req.body.teamShortName,
    "team.teamName": req.body.teamName,
    "team.teamRoster.player": players
});
newTeam.save().then((doc) => {
    console.log(doc);
    res.send(doc);
    console.log("Team Added");
}, (e) => {
    res.status(400).send(e);
});
});

猫鼬模式team.js:

var mongoose = require('mongoose');
var ObjectID = mongoose.Schema.Types.ObjectId;
var Schema = mongoose.Schema;

var player = new Schema({
playerName: {
type: String,
trim: true,
default: "Firstname Lastname",
index: {
  sparse: true
}
},
playerNumber: {
type: Number,
minlength: 1,
maxlength: 2,
index: {
  sparse: true
}
},
playerPosition: {
type: String,
index: {
  sparse: true
}
}
});
var Team = mongoose.model('Team', {
team:
{
    teamName: {
        type: String,
        trim: true,
        required: true
},
shortTeamName: {
  type: String,
  trim: true,
  uppercase: true,
  maxlength: 3,
  required: true
},
teamRoster: {
  player: player,
  teamCoach: {
    type: String,
    trim: true,
    required: true
},
},
added: {
  type: Date,
  default: Date.now
},
updated: {
  type: Date,
  default: Date.now
}
}
});

module.exports = {Team};

最后,create.hbs

<script>
$(document).ready(function() {
for (i = 1; i < 21; i++) {
text = "<div class='form-group row'><div class='col-md-4'><input id='player" + i + "Name' name='player" + i + "Name' placeholder='Firstname Lastname' type='text' class='form-control here'></div><div class='col-md-4'><select id='player" + i + "Number' name='player" + i + "Number'  class='form-control here jerseyNumber'></select></div><div class='col-md-4'><select id='player" + i + "Position' name='player" + i + "Position'  class='form-control here position'><option value='--'>--</option><option value='Goaltender'>Goaltender</option><option value='Forward'>Forward</option><option value='Defense'>Defense</option></select></div>";
    var playerSpan = $('.player');
    playerSpan.append($(text));
  }

  $(".jerseyNumber").each(function(){
    var $select = $(this);
    for (n=0;n<=99;n++){
      $select.append($('<option></option>').val(n).text(n))
    }
  });
});
</script>
    <div class="container-fluid" id="body">
        <div class="container" id="page-header">
            <h1><span id="headline">Add a team</span></h1>
            <hr>
            <h3><span id="subheadline">Please enter the information below to add to the database</span></h3>
                        <form method="post" action="/create">
                            <div class="form-group row">
                                <div class="col-md-4">
                            <label for="teamName" class="col-form-label">Team Name</label>
                                <input id="teamName" name="teamName" placeholder="London Lemmings" type="text" required="required" class="form-control here">
                            </div>
                                <div class="col-md-4">
                            <label for="teamShortName" class="col-form-label">Team Short Name</label>
                            <input id="teamShortName" name="teamShortName" placeholder="LLM" type="text" aria-describedby="teamShortNameHelpBlock" required="required" maxlength="3" class="form-control here">
                            <span id="teamShortNameHelpBlock" class="form-text text-muted">Three Characters Only</span>
                            </div>
                        </div>
                        <div class="form-group row">
                                <div class="col-md-4">
                            <label for="coachName" class="col-form-label">Coach Name</label>
                            <input id="coachName" name="coachName" type="text" class="form-control here">
                            </div>
                        </div>
                            <div class="form-group row">
                                <div class="col-md-4">
                                    <strong>Player Names</strong>
                                </div>
                                <div class="col-md-4">
                                    <strong>Player Numbers</strong>
                                </div>
                                <div class="col-md-4">
                                    <strong>Player Positions</strong>
                                </div>
                        </div>
                            <span class="player">
                            </span>
                        <div class="form-group row">
                            <div class="col-md-6">
                            <button name="submit" type="submit" class="btn btn-primary">Submit</button>
                            </div>
                        </div>
                        </form>
                <hr>
            </div>
            </div>

我希望代码能通过玩家姓名/号码/位置列表,然后将其插入数组players中。但是由于该循环中的控制台日志未触发,因此我认为未填充该阵列。当MongoDB返回以下内容时,将确认这一点:Cast to Embedded failed for value \"[]\" at path \"team.teamRoster.player\

任何帮助指出为什么未填充数组以及如何在Schema边界内填充数组的帮助。

0 个答案:

没有答案