Javascript 无法使用Object.keys(doc.forEach)读取未定义的属性
我得到了无法读取未定义错误的属性“repeats”,但在控制台日志记录时,似乎对象定义良好,因此我不知道代码为何崩溃 下面是doc对象的控制台日志: 下面是meta的控制台日志: 用户\u controller.js-有问题的路由Javascript 无法使用Object.keys(doc.forEach)读取未定义的属性,javascript,express,Javascript,Express,我得到了无法读取未定义错误的属性“repeats”,但在控制台日志记录时,似乎对象定义良好,因此我不知道代码为何崩溃 下面是doc对象的控制台日志: 下面是meta的控制台日志: 用户\u controller.js-有问题的路由 exports.user_details_post = [(req, res, next)=> { //LOG console.log(`Request: ${util.inspect(req.body)}`); // &
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.keysdoc.forEachsec=>。构造似乎有问题,因为sec显示为$\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
允许遍历Object.keys和normal.OK。非常感谢。至少我知道我离基地不远。如果我知道Object.keys的输出为什么不能按预期工作,我将非常感激。那么,您已经。。。在你的问题中,那些财产难道不在那里吗?非常感谢!就是这样!事实证明,findById返回的对象中添加了许多额外的隐藏字段/节,这些字段/节让我大吃一惊。这些隐藏字段包括:$\u、isNew、errors、\u doc、$locals和$init。非常感谢你!
META: { authData:
{ label: 'Authentication',
depth: 4,
hidden: false,
repeats: false },
nameData: { label: 'Name', depth: 5, hidden: false, repeats: false },
. . .
. . .
}
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 => {
if (meta.hasOwnProperty(sec) && meta[sec].repeats) {
...
}
});