Я использую Mongodb. Когда я хочу обновлять поля, я получаю следующую ошибку: Cast to ObjectId
не удалось получить значение:Ошибка для Cast to ObjectId с ошибкой для значения «[object Object], [object Object], [object Object]
[object Object],[object Object],[object Object]
Когда пост пуст, позвольте мне, чтобы обновить все свойства в то время как кто-то разместить нечто, то я не могу обновить свойства поставщика, и я получаю следующее сообщение об ошибке:.
View, которые использовали модальные от ui bootstapt.
<label class="col-lg-2 control-label">Company Name</label>
<div class="col-lg-10">
<input name="name" type="text" ng-model="provider.name" minlength="4" class="form-control" placeholder="Amazon Web Services" required>
<span class="help-block" ng-show="cspRegister.name.$dirty && cspRegister.name.$invalid"> Not valid name!</span>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Abbreviated company name</label>
<div class="col-lg-10">
<input name="abbreviated" type="text" ng-model="provider.abbreviated" class="form-control" placeholder="AWS" >
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Home page</label>
<div class="col-lg-10">
<input name="url" type="url" ng-model="provider.url" class="form-control" placeholder="http://aws.amazon.com/" required>
<span class="help-block" ng-show="cspRegister.url.$error.url"> Not valid url!</span>
</div>
</div>
<!--start point of muli select-->
<div class="form-group">
<label class="col-lg-2 control-label">Product name</label>
<div class="col-lg-10">
<select name="services" multiple ng-model="provider.services" class="form-control" required >
<option value="paas">Paas</option>
<option value="saas">Saas</option>
<option value="dbaas">Dbaas</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Location</label>
<div class="col-lg-10">
<select multiple ng-model="provider.locations" class="form-control" class="form-control" required>
<option ng-repeat="item in locations" value="{{item.name}}">{{item.name}}</option>
</select>
<span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span>
</div>
</div>
<!--end of multi selector-->
<div class="form-group">
<label class="col-lg-2 control-label">Description</label>
<div class="col-lg-10">
<textarea name="description" ng-model="provider.description" class="form-control" rows="3" required></textarea>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button ng-click="updateProvider(provider);ok()" class="btn btn-success"><i class="icon-white icon-plus"></i> Update & Close</button>
<button ng-click="cancel()" class="btn btn-warning">Cancel</button>
</div>
Поставщик схемы
var ProviderSchema = new Schema({
name: String,
abbreviated: String,
// company:String,
services: {type : Array, default:[]},
locations: {type : Array, default:[]},
description: String,
url: String,
author: String,
upvotes: { type:Number, default:0 },
upvoteUser:{type : Array, default:[]},
createdOn: { type: Date, default: Date.now },
certificates:[{ type: mongoose.Schema.Types.ObjectId, ref: 'Certificates' }],
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
ProviderSchema.methods.findByName = function (cb) {
return this.model('Provider').find({ name: this.name }, cb);
}
ProviderSchema.methods.upvote = function(cb) {
this.upvotes += 1;
this.save(cb, function(error) {
if(error){
console.error("Error saving object: ", error)
}
});
};
Это обновление на заводе
ob.updateProvider = function (provider) {
return $http.put('/api/providers/' + provider._id , provider, {
headers: {Authorization: 'Bearer '+Auth.getToken()}
}).success(function(provider){
})
};
и это функция обновления в моем апи
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Provider.findById(req.params.id, function (err, provider) {
if (err) { return handleError(res, err); }
if(!provider) { return res.send(404); }
var updated = _.merge(provider, req.body);
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, provider);
});
});
};
Это то, что у меня в контроллере.
$scope.updateProvider = function (updatedProvider) {
var provider = updatedProvider;
providers.updateProvider(provider)
.success(function() {
providers.getAll();
$scope.status = 'Updated provider! Refreshing provider list.';
})
.error(function(err, status) {
console.log(err);
console.log(status);
});
};
Это то, что результат для обновления:
abbreviated: 'aws',
_id: 55663fc20e9009c82dccba94,
company: 'http://dbpedia.org/resource/SnapLogic',
name: 'SnapLogic',
description: 'SnapLogic is a commercial software company that provides data an
2006. SnapLogic is headed by Ex-CEO and Co-Founder of Informatica, Gaurav Dhill
__v: 25,
posts:
[ { upvotes: 4,
upvoteUser: [Object],
comments: [Object],
__v: 16,
author: 'Juan y Maryam',
body: 'cc',
title: 'cczzs',
_id: '5569f716a4c7bbd4219a3303' },
{ upvotes: 4,
upvoteUser: [Object],
comments: [],
__v: 4,
author: 'Juan y Maryam',
body: 'zzaaa',
title: 'juan',
_id: '5569fb10c61b1af02fa1cc39' },
{ upvotes: 4,
upvoteUser: [Object],
comments: [],
__v: 4,
author: 'Juan y Maryam',
body: 'xxxxx',
title: 'xxxxxxxxxx',
_id: '5569fb15c61b1af02fa1cc3a' },
{ upvotes: 2,
upvoteUser: [Object],
comments: [],
__v: 2,
author: 'Test User',
body: 'nnnnnnnnnnnnnnnn',
title: 'ooooooooooooo',
_id: '5569fcd3335d49d82ccef9cd' },
{ upvotes: 1,
upvoteUser: [Object],
comments: [],
__v: 1,
author: 'Editor',
body: 'ss',
title: 'sssssss',
_id: '556a07892d62dadc182fcc1f' },
{ upvotes: 1,
upvoteUser: [Object],
comments: [],
__v: 1,
author: 'maya beaty',
body: 'ssssssss',
title: 'ssssssss',
_id: '556a07f92d62dadc182fcc23' },
{ upvotes: 1,
upvoteUser: [Object],
comments: [],
__v: 1,
author: 'Maryam Pashmi',
body: 'z',
title: 'z',
_id: '556a13e62848566023f03e6d' },
556a07f92d62dadc182fcc23,
556a13e62848566023f03e6d ],
certificates: [],
createdOn: Thu May 28 2015 00:05:54 GMT+0200 (Romance Daylight Time),
upvoteUser: [ 'maya beaty', 'Maryam Pashmi', 'Juan y Maryam' ],
upvotes: 3,
locations: [ 'Åland Islands', 'Albania' ],
services: [ 'saas' ] }
PUT /api/providers/55663fc20e9009c82dccba94 500 10ms
Есть ли один, кто знает, почему я получаю эту ошибку, и что проблема, которую я должен изменить в моей схеме?
Необходимо увидеть определение схемы и код представления, в котором вы обновляете новый контент (поля/значение) для «поставщика». Как правило, ошибка означает, что где-то там, где должен был идти объектID (5562ff ...), он передает строку «[object Object], ..», которая сама по себе кажется объектом, преобразованным в строку. Я предполагаю, что вы хотели использовать этот объект, но вместо этого использовали свой родительский объект – laggingreflex
@laggingreflex, оцененный для вашего ответа. Я обновил свой вопрос. –
Не могли бы вы добавить 'console.log (обновленный)' и показать его вывод? прямо после 'var updated = _.merge (поставщик, req.body)' в вашей функции обновления в вашем api – laggingreflex