此功能,我试图遍历目录的内容,但返回错误。
contents.forEach不是函数
function getBook(fileName){
return new Promise((resolve,reject)=>{
const bookSql =`select * from book1 where fileName='${fileName}'`
const contentsSql =`select * from contents1 where fileName='${fileName}'order by \`order\``
const book = db.queryOne(bookSql)
const contents = db.querySql(contentsSql)
if(book){
book.cover=Book.genCoverUrl(book)
console.log('contents:',contents);
book.contentsTree=Book.genContentsTree(contents)
}
resolve(book)
})
}
和genContentsTree主要问题在这里。forEach
static genContentsTree(contents){
if(contents){
const contentsTree = []
contents.forEach(c => {
c.children = []
if (c.pid === '') {
contentsTree.push(c)
} else {
const parent = contents.find(_ => _.navId === c.pid)
parent.children.push(c)
}
})
return contentsTree
}
}
这是控制台报告的错误以及有关内容的输出
contents: Promise { <pending> }
TypeError: contents.forEach is not a function
at Function.genContentsTree (/Users/dujinyang/admin-imooc-node/models/Book.js:362:22)
at /Users/dujinyang/admin-imooc-node/services/book.js:72:32
at new Promise (<anonymous>)
at getBook (/Users/dujinyang/admin-imooc-node/services/book.js:64:8)
at /Users/dujinyang/admin-imooc-node/router/book.js:53:13
at Layer.handle [as handle_request] (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/layer.js:95:5)
at /Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/index.js:281:22 {
isBoom: true,
isServer: true,
data: null,
output: {
statusCode: 500,
payload: {
statusCode: 500,
error: 'Internal Server Error',
message: 'An internal server error occurred'
},
headers: {}
},
reformat: [Function],
isDeveloperError: true
}
{
code: -1,
msg: 'contents.forEach is not a function',
error: 500,
errorMsg: 'Internal Server Error'
}