在集合mongodb上调用方法时无法读取undefined的属性
我正在尝试建立一个后ajax调用的基本基础结构,以便在名为“ranges”的集合下将某些内容保存到我的数据库中在集合mongodb上调用方法时无法读取undefined的属性,mongodb,export,database,Mongodb,Export,Database,我正在尝试建立一个后ajax调用的基本基础结构,以便在名为“ranges”的集合下将某些内容保存到我的数据库中 当我运行node connection.js时,我得到 “无法读取未定义的属性‘范围’”,我是否创建了错误的集合 插入前是否需要创建它?我在某个地方读到,如果MongdoDB不存在,它应该为您创建集合 我应该在某个时候关闭我的连接函数吗 当我导出DB时,它是否会自动导出对它下面集合的引用 connection.js MongoClient = require('mongodb').Mo
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server;
var url = 'mongodb://localhost:27017/test';
var db = MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);
db.createCollection("ranges");
}});
doSomething = function() {
db.ranges.insert ({"hello" : "world"});
};
module.exports = db;
var express = require('express');
cors = require('cors');
var app = express();
app.use('/', express.static('/public'));
app.use(cors());
var db = require('./connection');
app.get('/', function(req, res){
res.send('Got a GET request');
});
app.post('/', function(req, res){
res.send('Got a POST request');
});
app.listen(3000,function(){
console.log("Server started successfully at Port 3000!");
});
app.js
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server;
var url = 'mongodb://localhost:27017/test';
var db = MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);
db.createCollection("ranges");
}});
doSomething = function() {
db.ranges.insert ({"hello" : "world"});
};
module.exports = db;
var express = require('express');
cors = require('cors');
var app = express();
app.use('/', express.static('/public'));
app.use(cors());
var db = require('./connection');
app.get('/', function(req, res){
res.send('Got a GET request');
});
app.post('/', function(req, res){
res.send('Got a POST request');
});
app.listen(3000,function(){
console.log("Server started successfully at Port 3000!");
});
1-
db
未定义,因为您在导出连接之前没有等待连接就绪。为了能够在回调后执行操作,最好在需要db之后进行连接
此外,createCollection
是一个异步操作,因此您可能在创建insert方法之前调用它。你应该这样做:
db.createCollection("ranges", function(err, collection){
collection.insert({"hello" : "world"});
});
但是如果已经创建了范围
集合,则应该没有问题
2-Mongo将在您向其中插入文档时为您创建集合,但有时您可能会出现错误,如您正在创建的集合,因为集合不存在,您将有空引用。(现在我不确定驱动程序是否足够智能,如果不存在,是否可以为您创建它)
3-虽然不是完全必要,但有时关闭连接是好的。我通常在收到SIGTERM
或SIGINT
时这样做。见示例:
process.on('SIGTERM', function() {
db.close()
process.exit(0);
});
4-是的,但确保首先创建它们(记住从第一项开始,这是一个异步操作)
(另一个提示,检查,也许这会让事情变得更简单)1-
db
未定义,因为您不需要等待连接准备好再导出它。为了能够在回调后执行操作,最好在需要db之后进行连接
此外,createCollection
是一个异步操作,因此您可能在创建insert方法之前调用它。你应该这样做:
db.createCollection("ranges", function(err, collection){
collection.insert({"hello" : "world"});
});
但是如果已经创建了范围
集合,则应该没有问题
2-Mongo将在您向其中插入文档时为您创建集合,但有时您可能会出现错误,如您正在创建的集合,因为集合不存在,您将有空引用。(现在我不确定驱动程序是否足够智能,如果不存在,是否可以为您创建它)
3-虽然不是完全必要,但有时关闭连接是好的。我通常在收到SIGTERM
或SIGINT
时这样做。见示例:
process.on('SIGTERM', function() {
db.close()
process.exit(0);
});
4-是的,但确保首先创建它们(记住从第一项开始,这是一个异步操作)
(另一个提示,检查一下,也许这会让事情变得更简单)1。在调用doSomething函数将文档插入数据库之前,我检查了我的数据库并创建了“ranges”集合。嗯,我仔细查看了您的代码,我看到调用了module.exports,但数据库连接过程是异步的。我会更新我的答案好的,你已经改变了。它现在可以工作了(我投了更高的票,但我没有足够的声望点来展示)。很好。哦,好的,那你能接受吗?(表决票下方的复选符号)1。在调用doSomething函数将文档插入数据库之前,我检查了我的数据库并创建了“ranges”集合。嗯,我仔细查看了您的代码,我看到调用了module.exports,但数据库连接过程是异步的。我会更新我的答案好的,你已经改变了。它现在可以工作了(我投了更高的票,但我没有足够的声望点来展示)。很好。哦,好的,那你能接受吗?(选票下方的复选符号)