Я пытаюсь сделать несколько вызовов $http
на интерфейсе API для обновления моей модели.
Позвольте мне объяснить. Я хочу сохранить новый объект в моей базе данных, и как только этот объект будет сохранен, я хотел бы вернуть этот объект и выполнить еще один вызов $http
, который обновляет другой объект. Вот мой код:
Модель:
var departmentSchema = mongoose.Schema({
username : { type:String,unique:true,required:true},
email : { type:String,unique:true,required:true},
name : { type:String, default:"", unique:true,required:true},
stations : {
type: [mongoose.Schema.Types.ObjectId],
ref: 'Station'
}
})
// Method that Pushes a Station to the department
departmentSchema.methods.pushStation = function(station) {
var department = this;
department.stations.push(station)
};
API Route
router.put('/departments/:dep_id/stations/:stat_id', function(req, res, next) {
Station.findOne({_id: req.params.stat_id}, function(err, data1){
if (err) { return next(err); }
var station = data1;
Department.findOne({_id: req.params.dep_id}, function(err, data2){
if (err) { return next(err); }
var department = data2;
department.pushStation(station)
res.json({success:true, department:department});
});
});
});
Angularjs $ HTTP отступом вызовы
$scope.addNewStation = function(station){
$http.post('/api/stations/', station)
.then(function (data) {
console.log(data)
$scope.station = data.station;
$http.put('/api/departments/' + $scope.department._id + '/stations/' + $scope.station._id, $scope.station)
.then(function (data) {
console.log(data);
})
bootbox.alert("Station Created Successfully");
},function (err) {
console.log(err)
})
}
Я должен указать, что у меня есть $scope.department
в моем URL-адресе, и это связано с тем, что я получаю эти данные из предыдущего вызова, и я не хотел толковать этот раздел с ненужным кодом.
Так что проблема заключается в том, что когда я выполняю $scope.addNewStation(...)
, я могу успешно добавить новую станцию, появится предупреждение о загрузке, появится первый console.log(data)
, но затем я получаю сообщение об ошибке на консоли: TypeError: Cannot read property '_id' of undefined
, а второй console.log(data)
doesn Не появляется.
Пожалуйста, скажите мне, что я делаю неправильно здесь. Мне действительно нужна помощь в этом. Благодарю.
Извините, но. Невозможно увидеть scope.department._id, где установлено –
Вместо того, чтобы вставлять вызовы, почему бы не использовать «водопад»? [Вот ссылка] (https://www.npmjs.com/package/async-waterfall) –
Эй, @federicoscamuzzi, как я уже говорил выше, $ scope.department - это объект, который был возвращен из предыдущего вызова. И этот объект содержит $ scope.department._id. Поэтому просто предположите, что он есть. – AllJs