You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js连接MongoDB报错:TypeError: Cannot read properties of undefined

解决Node.js连接MongoDB时的TypeError问题

问题代码

var mongocilent=require('mongodb').mongocilent
var state = {db:null}
module.exports.connect=function(done){
var url ='mongodb://localhost:27017'
var dbname = "shopping" 
mongocilent.connect(url,(err,data)=>{
    if(err)return done(err)
        state.db=data.db(dbname)
        done()
    
})
module.exports.get=function(){
return state.db

报错信息

npm start
> shopping-cart@0.0.0 start
> nodemon ./bin/www

[nodemon] 2.0.19
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./bin/www`
/home/shinoy/Desktop/binoy/shopping cart/config/connection.js:8
mongocilent.connect(url,(err,data)=>{

            ^

TypeError: Cannot read properties of undefined (reading 'connect')
at module.exports.connect (/home/shinoy/Desktop/binoy/shopping 
cart/config/connection.js:8:17)

at Object.<anonymous> (/home/shinoy/Desktop/binoy/shopping cart/app.js:10:4)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Module.require (node:internal/modules/cjs/loader:1022:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/home/shinoy/Desktop/binoy/shopping cart/bin/www:7:11)
at Module._compile (node:internal/modules/cjs/loader:1120:14)

Node.js v18.7.0
[nodemon] app crashed - waiting for file changes before starting...

错误分析

  1. 拼写错误:mongocilent是拼写错误,正确的导出对象是MongoClient(注意首字母大写,拼写为MongoClient),这是报错的核心原因——你试图读取一个不存在的模块属性,导致mongocilent变量为undefined,调用connect方法自然触发错误。
  2. 语法错误:代码存在未闭合的大括号:connect函数没有结束的},get函数也缺少闭合的},会导致Node.js解析代码时出错。
  3. 连接逻辑细节:MongoDB驱动中,connect回调返回的是客户端实例,虽然data.db(dbname)可以工作,但直接使用客户端对象获取数据库更规范。

修正后的代码

// 修正拼写,使用正确的MongoClient
var MongoClient = require('mongodb').MongoClient;
var state = { db: null };

// 闭合connect函数的大括号
module.exports.connect = function(done) {
    // 直接在URL中指定数据库名,简化代码
    var url = 'mongodb://localhost:27017/shopping';
    MongoClient.connect(url, (err, client) => {
        if (err) return done(err);
        // 直接将数据库实例存入state
        state.db = client.db();
        done();
    });
};

// 闭合get函数的大括号
module.exports.get = function() {
    return state.db;
};

额外优化(MongoDB 4.x+版本)

如果使用的是MongoDB驱动4.x及以上版本,也可以用async/await写法让代码更清晰:

const { MongoClient } = require('mongodb');
const state = { db: null };

module.exports.connect = async function() {
    const url = 'mongodb://localhost:27017/shopping';
    const client = await MongoClient.connect(url);
    state.db = client.db();
};

module.exports.get = function() {
    return state.db;
};

内容的提问来源于stack exchange,提问作者Binoy P.r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:57:14