Javascript 如何传递子文档化的数组字段值
我已经用MEAN(Mongodb、Express、Angular、Node)编写了一个基本的todo应用程序。应用程序的后端ie.Node.js部分工作正常,并已使用postman rest api客户端进行了验证。但我无法将从客户端获取的值正确地传递到后端,可能是因为我的语法不正确,我无法理解它。此外,我无法将这些子文档化的数组字段值显示在客户端,并且每次它返回一个空数组字段 后端部件屏幕截图显示其工作正常: 我已经将所有代码上传到git公共存储库,您可以下载并尝试完整的应用程序 或者在这里您可以检查下面的angular controller、html和其他相关后端代码 张贴方法:Javascript 如何传递子文档化的数组字段值,javascript,angularjs,node.js,mongodb,Javascript,Angularjs,Node.js,Mongodb,我已经用MEAN(Mongodb、Express、Angular、Node)编写了一个基本的todo应用程序。应用程序的后端ie.Node.js部分工作正常,并已使用postman rest api客户端进行了验证。但我无法将从客户端获取的值正确地传递到后端,可能是因为我的语法不正确,我无法理解它。此外,我无法将这些子文档化的数组字段值显示在客户端,并且每次它返回一个空数组字段 后端部件屏幕截图显示其工作正常: 我已经将所有代码上传到git公共存储库,您可以下载并尝试完整的应用程序 或者在这里
api.post('/tasks', function (req, res) {
var task = {};
task.tasktype = req.body.tasktype;
//category : [req.body.category],
task.taskinfo = [];
for (var i = 0; i < req.body.taskInfo.length; i++) {
console.log(i);
var taskInfo = new TaskInfo(req.body.taskInfo[i]);
task.taskinfo.push(taskInfo);
console.log(task);
}
var taskObj = new Task(task);
taskObj.save(function (err) {
if (err) {
res.send(err);
return;
}
res.json({
message: 'Task has been created'
})
});
});
taskinfo.js模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var taskInfo = mongoose.Schema({
isactive:{type:Boolean},
taskobject:{type:String},
taskdetails:{type:String},
iscompleted:{type:Boolean}
},{ _id :true,// false
});
var TaskInfo = mongoose.model('TaskInfo', taskInfo);
module.exports.TaskInfo = TaskInfo;
module.exports.TaskInfoSchema = taskInfo;
任务控制器:
$scope.addTask = function(){
$http.post('/api/tasks',$scope.task).success(function(response){
window.location.href='/#tasks';
});
}
addtask html:
<h2 class="sub-header">Tasks</h2>
<div class="table-responsive" ng-init="getTasks()">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Task Type</th>
<th>IsActive</th>
<th>Task Object</th>
<th>Task Details</th>
<th>Is Completed</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="task in tasks">
<td>{{task._id}}</td>
<td>{{task.tasktype}}</td>
<td>{{task.taskInfo.isactive}}</td>
<td>{{task.taskInfo.taskobject}}</td>
<td>{{task.taskInfo.taskdetails}}</td>
<td>{{task.taskInfo.iscompleted}}</td>
<td><a href="#/tasks/details/{{task._id}}" class="btn btn-primary">Details</a> <a href="#/tasks/edit/{{task._id}}" class="btn btn-default">Edit</a> <button ng-click="deleteTask(task._id)" class="btn btn-danger">Delete</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
任务
#
任务类型
活跃的
任务对象
任务详细信息
完成
{{task.\u id}
{{task.tasktype}
{{task.taskInfo.isactive}
{{task.taskInfo.taskobject}
{{task.taskInfo.taskdetails}
{{task.taskInfo.iscompleted}
删除
如文所述:
子文档具有与普通文档相同的所有功能。这个
唯一的区别是它们不是单独保存的,而是单独保存的
在保存顶级父文档时保存
因此,您应该更改保存任务和任务信息模型的方式。在api.js
文件更改中:
task.tasktype = req.body.tasktype;
//category : [req.body.category],
task.taskinfo = [];
for (var i = 0; i < req.body.taskInfo.length; i++) {
console.log(i);
var taskInfo = new TaskInfo(req.body.taskInfo[i]);
task.taskinfo.push(taskInfo);
console.log(task);
}
var taskObj = new Task(task);
并改变您的看法:
<tr ng-repeat="task in tasks">
<td>{{task._id}}</td>
<td>{{task.tasktype}}</td>
<td>{{task.taskInfo.isactive}}</td>
<td>{{task.taskInfo.taskobject}}</td>
<td>{{task.taskInfo.taskdetails}}</td>
<td>{{task.taskInfo.iscompleted}}</td>
<td><a href="#/tasks/details/{{task._id}}" class="btn btn-primary">Details</a> <a href="#/tasks/edit/{{task._id}}" class="btn btn-default">Edit</a> <button ng-click="deleteTask(task._id)" class="btn btn-danger">Delete</a></td>
</tr>
{{task.\u id}
{{task.tasktype}
{{task.taskInfo.isactive}
{{task.taskInfo.taskobject}
{{task.taskInfo.taskdetails}
{{task.taskInfo.iscompleted}
删除
致:
{{task.\u id}
{{task.tasktype}
{{task.taskinfo[0].isactive}
{{task.taskinfo[0].taskobject}
{{task.taskinfo[0].taskdetails}
{{task.taskinfo[0].iscompleted}
删除
PS:查看您的github回购请求。非常感谢先生的帮助,是的,它是有效的,我想问题是因为文档没有保存在child doc中。谢谢,如果有任何疑问,我将发布更多,祝您愉快:)首先自己尝试:)干杯!
task.tasktype = req.body.tasktype;
//category : [req.body.category],
task.taskinfo = [];
for (var i = 0; i < req.body.taskInfo.length; i++) {
console.log(i);
var taskInfo = new TaskInfo(req.body.taskInfo[i]);
task.taskinfo.push(taskInfo);
console.log(task);
}
var taskObj = new Task(task);
task.tasktype = req.body.tasktype;
var taskObj = new Task(task);
taskObj.taskinfo = req.body.taskInfo;
<tr ng-repeat="task in tasks">
<td>{{task._id}}</td>
<td>{{task.tasktype}}</td>
<td>{{task.taskInfo.isactive}}</td>
<td>{{task.taskInfo.taskobject}}</td>
<td>{{task.taskInfo.taskdetails}}</td>
<td>{{task.taskInfo.iscompleted}}</td>
<td><a href="#/tasks/details/{{task._id}}" class="btn btn-primary">Details</a> <a href="#/tasks/edit/{{task._id}}" class="btn btn-default">Edit</a> <button ng-click="deleteTask(task._id)" class="btn btn-danger">Delete</a></td>
</tr>
<tr ng-repeat="task in tasks">
<td>{{task._id}}</td>
<td>{{task.tasktype}}</td>
<td>{{task.taskinfo[0].isactive}}</td>
<td>{{task.taskinfo[0].taskobject}}</td>
<td>{{task.taskinfo[0].taskdetails}}</td>
<td>{{task.taskinfo[0].iscompleted}}</td>
<td><a href="#/tasks/details/{{task._id}}" class="btn btn-primary">Details</a> <a href="#/tasks/edit/{{task._id}}" class="btn btn-default">Edit</a> <button ng-click="deleteTask(task._id)" class="btn btn-danger">Delete</a></td>
</tr>