【问题标题】:mongo db node.js some error with 'db' being undefinedmongodb node.js 一些错误,“db”未定义
【发布时间】:2021-01-19 17:12:35
【问题描述】:

在创建 server.js 文件并运行下面输入的 nodemon server.js 文件后,我正在关注 YouTube 视频 https://www.youtube.com/watch?v=kwPWwczwi6c&list=PLsY8aWop1tAHigCqvxZ61XK3a8I509VRx&index=2

var express = require("express");
var app = express();

var formidable = require("express-formidable");
app.use(formidable());

var mongodb = require("mongodb");
var mongoClient = mongodb.MongoClient;
var ObjectId = mongodb.ObjectId;

var http = require("http").createServer(app);
var bcrypt = require("bcrypt");
var fileSystem = require("fs");

var jwt = require("jsonwebtoken");
var accessTokenSecret = "myAccessTokenSecret1";

app.use("/public", express.static(__dirname + "/public"));
app.set("view engine", "ejs");

var socketIO = require("socket.io")(http);
var socketID = "";
var users = [];

var mainURL = "http://localhost:3000";

socketIO.on("connection", function (socket) {
  console.log("User connected", socket.id);
  socketID = socket.id;
});

http.listen(3000, function () {
  console.log("Server started.");
  mongoClient.connect("mongodb://localhost:27017", function (error, client) {
    var database = client.db("Social_De_Test");
    console.log("Database connected.");
    app.get("/signup", function (request, result) {
      result.render("signup");
    });
  });
});

我收到一个错误

[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json  
[nodemon] starting `node server.js`
Server started.
(node:5776) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the 
MongoClient constructor.
(Use `node --trace-deprecation ...` to show where the warning was created)
F:\Project\Workspace\heroku\node_modules\mongodb\lib\utils.js:668
          throw error;
          ^

TypeError: Cannot read property 'db' of undefined
    at F:\Project\Workspace\heroku\server.js:35:27
    at F:\Project\Workspace\heroku\node_modules\mongodb\lib\utils.js:665:9
    at F:\Project\Workspace\heroku\node_modules\mongodb\lib\mongo_client.js:224:23
    at connectCallback (F:\Project\Workspace\heroku\node_modules\mongodb\lib\operations\connect.js:366:5)
    at F:\Project\Workspace\heroku\node_modules\mongodb\lib\operations\connect.js:433:14
    at Server.<anonymous> (F:\Project\Workspace\heroku\node_modules\mongodb\lib\topologies\server.js:230:11)
    at Object.onceWrapper (events.js:421:26)
    at Server.emit (events.js:314:20)
    at Pool.<anonymous> (F:\Project\Workspace\heroku\node_modules\mongodb\lib\core\topologies\server.js:436:21)
    at Pool.emit (events.js:314:20)
[nodemon] app crashed - waiting for file changes before starting...

【问题讨论】:

  • 您的 mongoDB 是否在上述 url - localhost:27017 启动并运行?
  • 在运行var database = client.db("Social_De_Test");行之前尝试使用console.log打印错误对象

标签: node.js reactjs mongodb


【解决方案1】:

您正在对 DB 进行异步调用。只需确保您已经创建了一个承诺并在此处附加到数据库。我在这里使用猫鼬作为 ODM 并添加了一个 sn-p 以防您找不到任何帮助

global.mongoose = require('mongoose');

mongoose.Promise = global.Promise;

// Connecting to the database
mongoose
  .connect(dbConfig[envConfig.current_env], {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useFindAndModify : false
  })
  .then(() => {
    console.log('Successfully connected to the database');
  })
  .catch((err) => {
    console.log('Could not connect to the database. Exiting now...', err);
    process.exit();
  });

【讨论】:

    【解决方案2】:

    好像是这样一行:

    var database = client.db("Social_De_Test");
    

    应将客户端替换为 mongoClient:

    var database = mongoClient.db("Social_De_Test");
    

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 2022-11-02
      相关资源
      最近更新 更多