我试图找出一个post ajax调用的基本基础结构,以便在我的数据库中保存一些名为'范围的集合。
当我刚运行node connection.js时,我得到了 "无法阅读属性'范围'未定义",我创建该集合是错误的吗?
是否有必要在插入之前创建它?我读过MongdoDB应该为你创建的集合,如果不存在的话。
我应该在某个时候db.close()我的连接函数吗?
导出数据库时,是否会自动将引用导出到其下方的集合中?
connection.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;
app.js
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!");
});
答案 0 :(得分:0)
1 - db
未定义,因为您在导出连接之前不等待连接准备就绪。也许在需要db后才能更好地连接,以便能够在回调后执行操作
此外,createCollection
是异步操作,因此您可能在创建之前调用insert方法。你应该这样:
db.createCollection("ranges", function(err, collection){
collection.insert({"hello" : "world"});
});
但如果已经创建了ranges
集合,那么您应该没有问题。
2 - Mongo将在您向其中插入文档时为您创建集合,但有时您可能会遇到类似于您所拥有的错误,因为集合不存在您将具有空引用。(现在我&#39 ;我不确定驱动程序是否足够聪明,如果它不存在则为你创建
3 - 虽然不是完全必要,但有时最好关闭连接。我通常在收到SIGTERM
或SIGINT
时这样做。见例:
process.on('SIGTERM', function() {
db.close()
process.exit(0);
});
4 - 是的,但请确保首先创建它们(请记住它是第一个项目,它是异步操作)
(另一个提示,检查mongoose,也许会让事情变得更容易)