【发布时间】:2025-11-25 19:35:01
【问题描述】:
我有 3 个文件
./custom/db.js 用于数据库连接到 mongodb
const mongodb= require('mongodb');
var mongoclient= require('mongodb').MongoClient;
var dburl1= 'mongodb://localhost:27017';
var _db;
function dbconn(){
var _db;
async function books(){
await mongoclient.connect(dburl1, {keepAlive: 30000, connectTimeoutMS: 30000, useUnifiedTopology: true }, (err, db)=>{
dbo= db.db('books');
_db= dbo;
})
return _db;
}
return {
books: books,
}
}
module.exports= dbconn();
./custom/ctrg.js从mongodb获取数据
async function books_by_ctrg(ctrg, limit, start) {
console.log(ctrg);
if(start == null) start=0;
const dbo = await db.books();
// console.log(dbo);
await dbo.collection('books1').find({}).skip(start).limit(limit).toArray((err, result)=>{if(err){console.log(err); return err;}else{data= result;}})
return data;
};
./router/home.js 路由器文件(使用 Express 和 EJS)
router.get('/', async function (req, res) {
var data =await books_data.get_book_ctrg('Latest_Books', 7, 0);
var headerdata= {
title: "",
des: "",
keywords: ""
};
// console.log(data);
res.render('home.ejs', {data: data, headerdata: headerdata});
})
这些都在上面的文件以从主页的数据库中获取数据
问题
在首次加载时我得到了这个错误
node:6536) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'collection' of undefined
at Object.books_by_ctrg [as get_book_ctrg] (C:\node\custom\ctrg.js:15:19)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async C:\node\routes\home.js:12:15
(node:6536) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:6536) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
在第二次加载时(这意味着数据库连接现在正在“没有文件更改,只是在浏览器中刷新”)
TypeError: C:\node\views\home.ejs:67
65| <div class="course-slider owl-carousel">
66|
>> 67| <% data.forEach(book=>{ %>
68| <a href="<%= book.link %>">
69| <div class="course-item">
70| <figure class="course-preview">
Cannot read property 'forEach' of undefined
at eval (eval at compile (C:\node\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:14:13)
at home (C:\node\node_modules\ejs\lib\ejs.js:692:17)
at tryHandleCache (C:\node\node_modules\ejs\lib\ejs.js:272:36)
at View.exports.renderFile [as engine] (C:\node\node_modules\ejs\lib\ejs.js:489:10)
at View.render (C:\node\node_modules\express\lib\view.js:135:8)
at tryRender (C:\node\node_modules\express\lib\application.js:640:10)
at Function.render (C:\node\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (C:\node\node_modules\express\lib\response.js:1012:7)
at C:\node\routes\home.js:20:9
at processTicksAndRejections (internal/process/task_queues.js:97:5)
这两次访问或刷新后(一切正常,没有错误,没有警告,一切都很完美)
【问题讨论】:
-
nodejs:v12.16.3,MongoDb:v5.x.x
标签: javascript node.js mongodb