【发布时间】:2014-03-09 01:04:29
【问题描述】:
我有一个视图,其中列出了“运输商”。运输商有任何“交付”,所以我想将交付添加到各自的运输商。
我正在使用 express、mongoose 和 angular.js。我有两个模型定义:
// app/models/transporter.js
var Delivery = require('./delivery');
var transporterSchema = new mongoose.Schema({
name: String,
natl_id_num: String,
phone: String,
deliveries: [Delivery]
});
var Transporter = mongoose.model('Transporter', transporterSchema);
// app/models/delivery.js
var Transporter = require('./transporter.js');
var deliverySchema = new mongoose.Schema({
date: { type: Date, default: Date.now },
transporter: [Transporter],
amount: Number
})
var Delivery = mongoose.model('Delivery', deliverySchema);
然后我有一个视图,其中包含每个传输器的输入字段和按钮:
<tr ng-repeat="t in transporters track by $index">
<td>{{t.name}}</td>
<td>{{t.deliveries.length}}</td>
<td>
<input type="text" placeholder="amount" ng-model="deliveryAmount">
</td>
<td>
<button type="submit" ng-click="addDelivery(deliveryAmount, t)">Add</button>
</td>
</tr>
当我点击按钮时,我想为该运输车添加新的交付。这是对应的控制器:
$scope.addDelivery = function(deliveryAmount, transporter){
var data = {};
data.date = Date.now();
data.amount = deliveryAmount;
data.transporter = transporter;
console.log('data equals: ' + data.transporter);
$http({
url: '/api/deliveries',
data: data,
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function(data, status, headers, config){
$('input').val('');
console.log(data + ' added');
})
.error(function(data){
console.log('couldn\'t post delivery: ' + err);
});
};
但是,当我列出所有交货时,transporter 和 amount 属性不存在。在控制器中有:
$http.get('/api/deliveries')
.success(function(data){
// add all deliveries to deliveries scope
$scope.deliveries = data;
})
在视图中有:
<p ng-repeat='d in deliveries'>{{ d }}</p>
但是输出:
{"_id":"52f9f0e5156c0f6303d846ef","__v":0,"transporter":[],"date":"2014-02-11T09:44:05.619Z"}
而不是显示使用addDelivery 函数指定的数量和运输商
此处显示了我用于交付的 REST API:
// all deliveries
app.get('/api/deliveries', function(req, res){
Delivery.find(function(err, deliveries){
if(err) res.send(err);
res.json(deliveries);
});
});
// create delivery
app.post('/api/deliveries', function(req, res){
Delivery.create({
date: req.body.date,
transporter: req.body.transporter,
amount: req.body.amount
}, function(err, delivery){
if(err) res.send(err);
Delivery.find(function(err, deliveries){
if(err) res.send(err);
res.json(deliveries);
});
});
});
【问题讨论】:
-
所以你知道你的问题是你没有得到你期望的 JSON。但是您没有展示的是如何从您的“/api/deliveries”端点获取和转换它。从那时起,您应该看到您的所有角度代码都与这部分问题无关,并且您已经排除了重要部分。您最好编辑此内容并在此处阅读:stackoverflow.com/help/how-to-ask
-
好吧,我的错。添加了 express api 路由
-
拉出棱角分明的东西。真的。这是您要求人们通读与您遇到的问题无关的整个文档负载。您还可以通过包含您希望在响应中看到的 JSON 样本来增加价值,更重要的是数据在 mongo 中的样子。所以不仅仅是模式,数据也是如此。如果角度部分成为问题,那么这是另一个问题。但是您确实阅读了链接上的页面,不是吗:)
-
对不起,如果这听起来很刺耳。但是聚焦主题并相应地改变你的标题,你会得到更好的回应。附加帖子中已经有一件事很明显。让更多人看到。
标签: javascript node.js mongodb angularjs mongoose