![](/img/trans.png)
[英]NodeJS/Express/Mongodb - Cannot read property 'collection' of undefined
[英]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.