开发者问题收集

无法使用 parcel 读取 null javascript 的属性“db”

2019-06-27
1679

我尝试使用 openlayers 地图设置 mongodb 系统,但它不起作用:未捕获 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


})

我猜这个错误可能是因为我使用的是 npm start 而不是 node server.js,但我不确定,因为我是新手。Mongodb 是通过在 cmd 上执行以下命令启动的:“mongod”,然后在另一个 cmd 上执行 mongo。

更新 :对于遇到与我相同问题的每个人,我建议删除包裹。这就是我所做的,现在它工作正常

2个回答

我认为您目前在错误的地方提供了 url - 您需要在调用 .connect 之前向 MongoClient 提供 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();
});

查看此处的文档: http://mongodb.github.io/node-mongodb-native/3.2/tutorials/connect/

更新:

您还可以使用 ES6 async/await 执行上述操作,从长远来看,它比回调或本机承诺更简单,这是我们的设置:

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; }
});
Matthew P
2019-06-27

使用 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))

希望对您有所帮助

祝您好运!

dpokey
2019-06-27