无法使用 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