nodejs-mongodb从数据库读取后如何逐个显示数据

时间:2014-09-04 09:26:22

标签: node.js mongodb

我是nodejs的新手,正在尝试编写测验代码。现在我可以使用db.collection.find()从集合中提取问题了 但我的问题是我不想在页面上一次显示所有数据(即测验问题)。我想要的是我将显示第一个问题,然后当用户点击“下一步”按钮时,将显示下一个问题。

比如说如果有10个问题,那么一开始只会显示一个问题,然后当用户点击“下一步”按钮时,第二个问题将会显示,依此类推。

我对如何实施它缺乏想法。请帮助。

以下是app.js

的相关代码
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , QuizProvider = require('./quizprovider').QuizProvider;

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.set('view options', {layout: false});
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

var qProvider= new QuizProvider('localhost', 27017);

//Routes
......
......
//index
app.get('/', function(req, res){
  qProvider.findAll(function(error, ques){
      res.render('index', {
            title: 'Questions',
            myquiz:ques
        });
  });
});

app.listen(process.env.PORT || 3000);

以下是quizprovider.js的相关代码

var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;

QuizProvider = function(host, port) {
  this.db= new Db('quiz-db', new Server(host, port, {safe: false}, {auto_reconnect: true}, {}));
  this.db.open(function(){});
};

.......
.......

//find all questions
QuizProvider.prototype.findAll = function(callback) {
    this.getCollection(function(error, quiz_collection) {
      if( error ) callback(error)
      else {
        quiz_collection.find().toArray(function(error, results) {
          if( error ) callback(error)
          else callback(null, results)
        });
      }
    });
};

exports.QuizProvider = QuizProvider;

这是index.jade

extends layout

block content
    h1= title
    #Questions
       - each mq in myquiz
         div.mq
         div.Question= mq.Question      

        a(href="/question/new")!= "Add New Question"

2 个答案:

答案 0 :(得分:0)

好的朋友我终于找到了解决这个问题的方法。首先,我使用JADE结尾的Javascript将myquiz中的记录检索到名为data的数组中,然后使用JADE模板中的以下Jquery代码显示它:

$( "#myquestions" ).html(data[0]);
$( "#option1" ).html(data[1]);
$( "#option2" ).html(data[2]);
$( "#option3" ).html(data[3]);
$( "#option4" ).html(data[4]);

答案 1 :(得分:0)

在一定时间后通过设置setTimeout()函数并从中调用一个函数来重新加载页面。

然后,每次页面重新加载时,get('/')将被触发。在j(say)中增加get('/')的值,然后将其传递到res.render('index',{j: j}),并在您的index.jade中使用它。