簡體   English   中英

無法讀取未定義的MongoDB的屬性“集合”

[英]Cannot read property 'collection' of undefined MongoDB

我試圖使用Node和MongoDB執行CRUD操作。

我收到以下錯誤。

TypeError:無法讀取未定義的屬性“ collection”

const express = require('express')
const bodyParser= require('body-parser')
const MongoClient = require('mongodb').MongoClient
const app = express()
app.use(bodyParser.urlencoded({extended: true}))

const url = 'mongodb://localhost:27017/testdb';

var db
MongoClient.connect(url, function(err, client) {
  if (err) return console.log(err)
  var db = client.db('testdb');

})

app.post('/quotes', (req, res) => {
    var collectionName = 'quotes';
    var collection = db.collection(collectionName);
    collection.save(req.body, (err, result) => {
    if (err) return console.log(err)

    console.log('saved to database')
    res.redirect('/')
  })
})

錯誤跟蹤:

TypeError:無法讀取Layer.handle處app.post(/var/www/html/Express/SimpleCrud/server.js:20:21)中未定義的屬性“ collection” [作為handle_request](/ var / www / html /在下一個(/var/www/html/Express/SimpleCrud/node_modules/express/lib/router/route.js:137:13)Express / SimpleCrud / node_modules / express / lib / router / layer.js:95:5)在Layer.handle的Route.dispatch(/var/www/html/Express/SimpleCrud/node_modules/express/lib/router/route.js:112:3)處[作為handle_request](/ var / www / html / Express /位於/var/www/html/Express/SimpleCrud/node_modules/express/lib/router/index.js:281:22的SimpleCrud / node_modules / express / lib / router / layer.js:95:5)(位於Function.process_params( /var/www/html/Express/SimpleCrud/node_modules/express/lib/router/index.js:335:12)在下一個(/ var / www / html / Express / SimpleCrud / node_modules / express / lib / router / index .js:275:10)位於/var/www/html/Express/SimpleCrud/node_modules/body-parser/lib/read.js:130:5處於invokeCallback(/ var / www / html / Express / SimpleCrud / node_modules / raw-body / index.js:224:16)

我正在使用Mongodb 3.1

嘿,

嘗試使用: const url = 'mongodb://localhost:27017';

更新:根據mongodb軟件包v3.x,數據庫的聲明是單獨完成的,而不是URL的一部分。 此處的更多信息: https : //www.npmjs.com/package/mongodb

這是一個簡單的關閉問題 var是本地/全局范圍,您有var db多個聲明

var db  <====== first declaration which is undefined 
MongoClient.connect(url, function(err, client) {
 if (err) return console.log(err)
 var db = client.db('testdb');   <======= second declaration where u connected to 
 the db which is undefined out of this scope

})

我個人更喜歡貓鼬,只要不是打字稿:D

幾個例子:

const MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server;

const mongoClient = new MongoClient(new Server('localhost', 27017));
mongoClient.open(function(err, mongoClient) {
const db1 = mongoClient.db("mydb");

mongoClient.close();
});

要么

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'myproject';

//Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  assert.equal(null, err);
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

資源

代碼中有一個簡單的錯誤。 與mongodb服務器建立連接之前,您已經啟動了http服務器。 這就是為什么將post api加載到內存中時未定義變量db的原因。 由於與mongodb的連接是異步的。 為了利用mongodb實例,您必須首先連接mongdb服務器,然后啟動http服務器並在全局或某些模塊中存儲數據庫實例,而您可能需要這些模塊並獲取該數據庫實例來執行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM