无法从Express.js代码连接到MongoHQ

时间:2014-02-01 20:24:56

标签: node.js express mongohq

我是Node和Express的新手,我很难在Express中从数据库中获取数据。

从控制台运行时,下面的第一个代码示例运行并返回数据,但是当我尝试从Express中执行同样的操作时它不起作用?

使用/ scores URI我无法从服务器获取任何内容。它最终会超时。

非常感谢任何帮助!

/**
 * Created by Mike on 2/1/14.
 */
var mongo = require('mongodb');
var connectionUri = "mongodb://app_user:xxxxxxx@troup.mongohq.com:10000/??????'";
var mongodb = require('mongodb'), MongoClient = mongodb.MongoClient;
MongoClient.connect(connectionUri, function (err, db) {
    if (err) throw error;

    var collection = db.collection('sessions');

    collection.findOne({}, function (err, doc) {
        if (err) throw err;

        console.log(doc.results);

        db.close();
    });
});

这是app.js Express代码:

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var mongo = require('mongodb');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.bodyParser());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/api', function(request, response) {
    response.send({name:"Raymond",age:40});
});
app.get('/', routes.index);
app.get('/users', user.list);
app.get('/scores', routes.scores);
app.get('/sessions', routes.sessions);
//app.post('/session', routes.session(db));

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

最后这里是routes / index.js文件。 (已清理连接字符串)

/*
 * GET home page.
 */

exports.index = function (req, res) {
  res.render('index', { title: 'Express' });
};

exports.sessions = function (req,res) {
    "use strict";
    res.render('index', { title: 'Scores' });
};

exports.scores = function (db) {
    return function (req, res) {
        "use strict";
        var connectionUri = "mongodb://app_user:xxxxxxxxx@troup.mongohq.com:00000/??????";
        var mongodb = require('mongodb'), MongoClient = mongodb.MongoClient;
        MongoClient.connect(connectionUri, function (err, db) {
            if (err) throw error;

            var collection = db.collection('sessions');

            collection.findOne({}, function (err, doc) {
                if (err) throw err;

                res.render('scores', {
                    "scores": doc
                });

                db.close();
            });
        });
        /*var collection = db.get('sessions');
        collection.find({}, {}, function (e, docs) {
            res.render('scores', {
                "scores" : docs
            });
        });*/
    };
};

1 个答案:

答案 0 :(得分:0)

您为exports.scores导出的函数似乎希望传递db对象。

exports.scores = function (db) {

您的app.js只是将其用作路由处理程序,并且在期望req对象时将resdb传递给它。当路线被击中时,您所做的只是返回一个功能。

为此,您需要导出当前正在返回的功能。

exports.scores = function (req, res) {

请注意!!!

您正在通过该路线创建连接次的连接。如果路由变得忙碌,则在最后关闭它时,您将不必要地打开许多与数据库的连接池。最好在中心点打开一个连接,然后从那里传递db对象。