Я получаю сообщение об ошибке «не могу прочитать свойство« повторы »из неопределенного», но после входа в консоль кажется, что объект (-ы) четко определен, поэтому я не знаю, почему происходит сбой кода.
Вот журнал консоли doc
Объект:
RESULT DOC: { _id: 5d9bc5c2bbb87318847cef91,
authData:
{ dateEffective: { attr: [Object], value: [] },
username: { attr: [Object], value: [Array] },
password: { attr: [Object], value: [Array] },
mainEmail: { attr: [Object], value: [Array] },
_id: 5d9bc5c2bbb87318847cef86 },
nameData:
{ title: { attr: [Object], value: [Array], enum: [Array] },
firstName: { attr: [Object], value: [Array] },
middleName: { attr: [Object], value: [Array] },
familyName: { attr: [Object], value: [Array] },
suffix: { attr: [Object], value: [Array], enum: [Array] },
_id: 5d9bc5c2bbb87318847cef87 }
. . .
. . .
Вот журнал консоли meta
:
META: { authData:
{ label: 'Authentication',
depth: 4,
hidden: false,
repeats: false },
nameData: { label: 'Name', depth: 5, hidden: false, repeats: false },
. . .
. . .
}
users_controller.js
- проблемный маршрут,,,
exports.user_details_post = [(req, res, next)=> {
//LOG
console.log(`Request: ${util.inspect(req.body)}`); // <-- ALL GOOD HERE
next();
},
//VALIDATE
body('email', 'Must be valid email.').isLength({min: 5}).trim(),
//SANITIZE
sanitizeBody('*').escape(),
//SAVE
(req,res, next) =>{
let user = UserObj.findById(req.params.id, function(err,doc){
const errors = validationResult(req);
let activeArr = [];
let maxActive = 0;
if (err) {}
console.log(`RESULT DOC: ${util.inspect(doc)}`); // <-- ALL GOOD HERE. DOC APPEARS WELL-FORMED
Object.keys(doc).filter(sec=>sec!=="_id" && sec!=="__v").forEach(sec=>{
console.log(`SEC: ${util.inspect(sec)}`); // <-- PROBLEM HERE!
// "Sec" is "$___", but should be
// "authData", "nameData", etc.
// Note, I also tried
// "Object.keys(JSON.parse(doc)).filter.
// but that didn't work either
if (!!meta[sec].repeats) { // CRASHES HERE. "Meta" is well-defined,
// and has fields "authData", "emailData",
// etc., but "sec" seems to be problematic
Object.keys(sec).forEach(fld=> {
. . .
. . .
}
})
}];
Очевидно, что конструкция Object.keys(doc).forEach(sec=> . . . )
, похоже, имеет проблемы, потому что sec
выходит как $___
вместо authData
, nameData
и т. Д. Могу ли я выполнить итерацию поObject.keys(doc)
и если да, то что я делаю не так?