我是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
});
});*/
};
};
答案 0 :(得分:0)
您为exports.scores
导出的函数似乎希望传递db
对象。
exports.scores = function (db) {
您的app.js
只是将其用作路由处理程序,并且在期望req
对象时将res
和db
传递给它。当路线被击中时,您所做的只是返回一个功能。
为此,您需要导出当前正在返回的功能。
exports.scores = function (req, res) {
请注意!!!
您正在通过该路线创建连接每次的连接。如果路由变得忙碌,则在最后关闭它时,您将不必要地打开许多与数据库的连接池。最好在中心点打开一个连接,然后从那里传递db
对象。