【问题标题】:Mongoose TypeError 'cannot read namespace' of undefined in collection.js in Mongoose moduleMongoose 模块中 collection.js 中未定义的 Mongoose TypeError '无法读取命名空间'
【发布时间】:2020-03-25 23:57:41
【问题描述】:

当我使用 NPM 运行我的应用程序时,它运行没有问题。使用我的 VSC 调试器运行它时,我在位于 node_modules/mongodb/lib/collection.js 的 collection.js 中两次收到以下错误:

TypeError: Cannot read property 'namespace' of undefined
    at Object.get [as dbName] (/xxxx/xxxx/xxxx/xxxx/node_modules/mongodb/lib/collection.js:184:19)
    at Object.<anonymous> (/xxxx/xxxx/xxxx/xxxx/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:184:36)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/xxxx/xxxx/xxxx/xxxx/node_modules/mongoose/lib/drivers/node-mongodb-native/index.js:8:22)

实例 1 已在此处提取:

Object.defineProperty(Collection.prototype, 'dbName', {
  enumerable: true,
  get: function() {
    return this.s.namespace.db;
  }
});

实例 2 在此处接机:

Object.defineProperty(Collection.prototype, 'collectionName', {
  enumerable: true,
  get: function() {
    return this.s.namespace.collection;
  }
});

我在 app.js 中的连接配置如下所示(在使用 NPM 运行应用程序时可以正常工作,没有任何错误):

  const dbUser = process.env.xxxxx;
  const dbPass = process.env.xxxxx;
  const dbURL = process.env.xxxxx;
  const dbName = process.env.xxxxxx;

mongoose.set('useCreateIndex', true);
mongoose.connect(`mongodb+srv://${dbUser}:${dbPass}@${dbURL}/${dbName}`, {useNewUrlParser: true , useUnifiedTopology: true} )
  .then(_ => console.log('MongoDB successfully connected!'))
  .catch(err => console.error(err));

本应用中唯一加载Mongoose的Mongoose模型如下:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// UserSchema has been omitted for privacy
const UserSchema = new Schema({
});

module.exports = User = mongoose.model('User', UserSchema);

没有其他加载 Mongoose 模块的实例。我还检查了我在 mongoose.connect 方法中传递的选项,它似乎也不是它们。此外,我检查了存储在 env 文件中的值,它们似乎也没有导致问题。

谢谢,非常感谢任何帮助!

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    更新 nodemon ,猫鼬

    npm i -g nodemon
    npm i mongoose
    

    如果你收到包依赖的警告,例如:

    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules\chokidar\node_modules\fsevents):
    => npm i fsevents
    

    也可以安装可选的依赖项。

    【讨论】:

    • 我只是尝试了上面的方法,不幸的是它没有解决问题。
    • 也更新你的猫鼬包。
    • 是的,紧随其后 - 不能解决问题。
    【解决方案2】:

    更新猫鼬 v5.8.11。今天(01/31/2020)已经发布了。

    仅供参考-

    https://github.com/Automattic/mongoose/issues/8528#issuecomment-578221253

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2021-05-24
      • 2019-09-14
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多