У меня возникли проблемы с выяснением, правильно ли я построил схему, потому что при попытке изменения PATCH свойства role из профиля я получаю ошибку 500. (Примечание: Ошибка 500 раз отвечает пустой {}, так что это на самом деле не информативен)Mongoose Subdocument не обновляется
Ниже профиля схемы:
var ProfileSchema = new Schema({
name: {
type: String,
required: true
},
roles: [{
application: {
type: Schema.Types.ObjectId,
required: true,
ref: 'Application'
},
role: {
type: String,
required: true,
enum: [ 'admin', 'author', 'publisher' ]
}
}]
});
Каждый профиль имеет определенную роль для приложения, и когда Я посылаю запрос на действие контроллера «обновление», он не:
профиля контроллера обновления:
// Updates an existing Profile in the DB
export function update(req, res) {
try {
if (req.body._id) {
delete req.body._id;
}
console.log('ENDPOINT HIT...');
console.log(`REQUEST PARAM ID: ${req.params.id}`);
console.log('REQUEST BODY:');
console.log(req.body);
console.log('ENTIRE REQUEST: ');
return Profile.findByIdAsync(req.params.id)
.then(handleEntityNotFound(res))
.then(saveUpdates(req.body))
.then(respondWithResult(res))
.catch(handleError(res));
} catch(ex) {
console.error('FAILED TO UPDATE PROFILE');
return handleError(res);
}
}
Я удостоверился, что идентификатор и тело отправляются правильно, и я нахожусь в конечной точке.
Это пример JSON запроса тела:
{
_id: 57e58ad2781fd340563e29ff,
__updated: Thu Oct 27 2016 15:41:12 GMT-0400 (EDT),
__created: Fri Sep 23 2016 16:04:34 GMT-0400 (EDT),
name: 'test',
__v: 11,
roles:[
{ application: 57b70937c4b9fe460a235375,
role: 'admin',
_id: 58125858a36bd76d8111ba16 },
{ application: 581b299f0145b48adf8f57bd,
role: 'publisher',
_id: 581b481898eefb19ed8a73ee }
]
}
Когда я пытаюсь найти анкеты Id, обещание цепи идет прямо в улове (HandleError (Рез)); часть кода и показывает пустой объект в моей консоли.
Моя функция ошибки ручки:
function handleError(res, statusCode) {
console.error('HANDLE PROFILE ERROR: ', statusCode);
statusCode = statusCode || 500;
return function(err) {
console.error('PROFILE ERROR:');
console.error(JSON.stringify(err, null, 2));
res.status(statusCode).send(err);
};
}
UPDATE
Я осознав код разрывается, когда она попадает мой saveUpdates функции (Примечание: Я использую lodash):
function saveUpdates(updates) {
/// the code is fine here ///
return function(entity) {
/// once it enters in here, is where it begins to break ///
var updated = _.merge(entity, updates);
if(updated.roles.length != updates.roles.length) {
updated.roles = updates.roles;
}
for(var i in updates.roles) {
updated.roles.set(i, updates.roles[i]);
}
return updated.saveAsync()
.then(updated => {
return updated;
});
};
}
, чтобы увидеть ошибку 'findByIdAsync (...). Catch ((err) => {console.log (err); handleError (res);})' –
Можете ли вы рассказать нам, что находится на 'req. params.id' точно, пожалуйста? что показано вам в 'console.log (\' REQUEST PARAM ID: $ {req.params.id} \ ');' –
@ GrégoryNEUT, когда я console.log params.id - это то, что я получаю : 'ЗАПРОС PARAM ID: 57bd9db4f33dcd03c3fd9990' –