【问题标题】:db is not a function error in NodeJS using MongoDBdb 不是使用 MongoDB 的 NodeJS 中的函数错误
【发布时间】:2020-01-15 03:33:26
【问题描述】:

我在之前运行的应用程序中遇到了这个错误

const usersCollection = require('../db').db().collection("users")
                                         ^

TypeError: require(...).db is not a function
at Object.<anonymous> (/Users/user/Desktop/sites/app/models/User.js:2:42)
at Module._compile (internal/modules/cjs/loader.js:959:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
at Module.load (internal/modules/cjs/loader.js:815:32)
at Function.Module._load (internal/modules/cjs/loader.js:727:14)
at Module.require (internal/modules/cjs/loader.js:852:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/Users/user/Desktop/sites/app/controllers/userController.js:1:14)

db.js

const dotenv = require('dotenv')
dotenv.config()
const mongodb = require('mongodb')

mongodb.connect(process.env.CONNECTIONSTRING, {useNewUrlParser: true, useUnifiedTopology: 
true}, function(err, client) {
module.exports = client
const app = require('./app')
app.listen(process.env.PORT)
})

.env 文件

CONNECTIONSTRING=mongodb+srv://user:password@sandbox-gk8wp.mongodb.net/db? 
retryWrites=true&w=majority
PORT=3000

我也将我的 mongodb npm 包从 3.3.3 更新到 3.4.1,但仍然出现同样的错误。似乎是什么问题?

【问题讨论】:

  • 您的代码中有很多可以改进的地方。您是否正在遵循任何类型的教程来开始?虽然您的 db.js 应该(并且确实)包含有关连接到数据库的详细信息,但它不是应用程序声明的正确位置。但是您会收到该错误,因为 db.js 没有定义名为 db() 的函数。
  • 嗨,史蒂夫,是的,我遵循了这个教程并添加了一些。这是去年发布的一个工作和发布的应用程序,然后突然中断。我已经审查了我的提交并检查了所有相同的内容。我想不通。我现在正在尝试更改我的数据库连接的代码。
  • 请检查这个 :: stackoverflow.com/questions/59709431/… ,您需要在 db 文件中导出 newFunction

标签: node.js mongodb


【解决方案1】:

您正在尝试在回调中导出某些内容,因为它是异步方法,所以在您导入它时可能可用也可能不可用。更好的方法是创建db.jslike

const dotenv = require('dotenv')
dotenv.config()
const mongodb = require('mongodb')

function getMongoClient() {
  return mongodb.connect(process.env.CONNECTIONSTRING, {useNewUrlParser: true, useUnifiedTopology: true});
}

module.exports = getMongoClient;

当你想使用它时


const getMongoClient = require('../db');

getMongoClient()
  .then(client => client.db().collection("users"));

希望这会有所帮助。你也可以使用async/await

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多