无法使用包裹读取空javascript的属性'db'

时间:2019-06-27 15:15:44

标签: node.js mongodb npm openlayers parceljs

我试图用我的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。

更新:对于与我有相同问题的每个人,我建议删除包裹。那就是我所做的,现在可以正常使用

2 个答案:

答案 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))

希望我能帮上忙

祝你好运!