我要让用户输入二十个球员名称,球衣号码和位置;然后将这些响应组装成一个数组;然后将该数组插入到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边界内填充数组的帮助。