如何使用node-mongodb-native连接到Modulus.io?

时间:2012-12-28 16:30:56

标签: javascript node.js mongodb

这里的第一个问题,所以要善良;)

我正在配置一个Node.js服务器连接到Modulus.io node.js托管中的MongoDB数据库(非常好的东西,值得一试),但我似乎无法正确地建立连接。 Per the getting-started guide我以格式获得连接uri:

的mongodb://用户:pass@mongo.onmodulus.net:27017 / 3xam913

但是这似乎不适用于我尝试移植到服务器的代码结构(如果它在本地运行),因为Server class参数结构只有主机和端口来定义.. 。

这是我试图适应连接的代码:

// server setup
var mongo = require('mongodb'),
    mdbServer = mongo.Server,
    mdbDb = mongo.Db,
    mdbObjectID = mongo.ObjectID;

// open a connection to the mongoDB server
var mdbserver = new mdbServer('localhost', 27017, {auto_reconnect: true});

// request or create a database called "spots03"
var db = new mdbDb('spots03', mdbserver, {safe: true});

// global var that will hold the spots collection
var spotsCol = null;

// open the database
db.open(function(err, db) {
    if(!err) {
        // if all cool
        console.log("Database connection successful");

        // open (get/create) a collection named spotsCollection, and if 200, 
        // point it to the global spotsCol
        db.createCollection(
            'spotsCollection',
            {safe: false},  // if col exists, get the existing one
            function(err, collection) {spotsCol = collection;}
        );
    }
});

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

看起来像是一些事情:

  1. 连接网址应为mongo.onmodulus.net

    var mdbserver = new mdbServer('mongo.onmodulus.net',27017,{auto_reconnect:true});

  2. rounce是正确的,数据库名称由Modulus自动生成。

    var db = new mdbDb('3xam913',mdbserver,{safe:true});

  3. 模数据库需要身份验证。在调用createCollection之前,您必须调用auth并将其传递给项目仪表板上设置的用户凭据。

  4. 我是模数开发人员,我知道数据库名称并不理想。

    编辑:这是一个工作示例的完整来源。它记录每个HTTP请求,然后将所有请求发送回用户。

    var express = require('express'),
          mongo = require('mongodb'),
         Server = mongo.Server,
             Db = mongo.Db;
    
    var app = express();
    
    var server = new Server('mongo.onmodulus.net', 27017, { auto_reconnect: true });
    var client = new Db('piri3niR', server, { w: 0 });
    client.open(function(err, result) {
      client.authenticate('MyUser', 'MyPass', function(err, result) {
        if(!err) {
          console.log('Mongo Authenticated. Starting Server on port ' + (process.env.PORT || 8080));
          app.listen(process.env.PORT || 8080);
        }
        else {
          console.log(err);
        }
      });
    });
    
    app.get('/*', function(req, res) {
      client.collection('hits', function(err, collection) {
        collection.save({ hit: req.url });
    
        // Wait a second then print all hits.
        setTimeout(function() {
          collection.find(function(err, cursor) {
            cursor.toArray(function(err, results) {
              res.send(results);
            });
          });
        }, 1000)
      });
    });
    

答案 1 :(得分:1)

可能错误的数据库名称?

来自MongoDB docs on the subject'3xam913'是您的数据库名称,而不是'spots03'。

var db = new mdbDb('3xam913', mdbserver, {safe: true});