我试图用我的openlayers映射设置一个mongodb系统,但是它不起作用:Uncaught TypeError:无法读取null的属性'db'。我有关mongodb的代码部分是:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
var tapDB = db.db("tapDB"); //<-- here is the error
})
我认为此错误可能是因为我正在使用节点server.js的npm start instear,但是我不确定是因为我是新手。通过执行以下命令,通过cmd启动Mongodb:“ mongod”,然后在另一个cmd上启动mongo。
更新:对于与我有相同问题的每个人,我建议删除包裹。那就是我所做的,现在可以正常使用
答案 0 :(得分:2)
我认为您当前在错误的位置提供了url
-您需要在调用MongoClient
之前提供指向.connect
的URL。根据MongoDB的Node.js驱动程序文档,它应该看起来像这样:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'tapDB';
const client = new MongoClient(url);
client.connect(function(err) {
console.log("Connected successfully to server");
const db = client.db(dbName);
// use database connection here
client.close();
});
在这里查看文档:{{3}}
更新:
您还可以使用ES6 async / await进行上述操作,从长远来看,它比回调或本机Promise更易于使用,这是我们的设置:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'tapDB';
(async () => { // async/await function that will run immediately
let client;
try {
client = await MongoClient.connect(url);
} catch (err) { throw err; }
console.log("Connected successfully to server");
const db = client.db(dbName);
let res;
try {
res = await db.collection("markers").insertMany([{ test1: true, test2: "3/5" }]);
} catch (err) { throw err; }
try {
await client.close();
} catch (err) { throw err; }
});
答案 1 :(得分:0)
使用Javascript Promises ES6可以使代码更清晰
看我的代码
const {MongoClient} = require('mongodb');
MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true }).then(client => {
console.log('Connected to MongoDB server')
const db = client.db('dbName')
// Here you can place your operations with the bd
client.close();
}, e => console.log('Error to connect', e))
希望我能帮上忙
祝你好运!