如何将数据发送到页面加载后计算的MongoDB?

时间:2016-09-12 21:38:36

标签: javascript ajax node.js mongodb express

我将Node.js与Express和MongoDB一起使用。

我有一个页面'/score',用于根据上一页上的测验计算用户的得分。 '/score'路线如下:

app.get('/score', stormpath.getUser, function(req, res) {
    var quiz = req.session.mostRecentQuiz;
    db.collection('quizzes').find(quiz).toArray(function (err, docs) {
        assert.equal(err, null);
        var quiz;
          docs.forEach(function (doc) {
            quiz = doc.quiz;
        });
        res.render('score', {quiz: quiz});
    });
    db.collection('users').update({user: req.user.username}, { $set: {"mostRecentQuiz": quiz } }, function (err, result) {
        if (err) throw err;
        console.log(result);
    } );
});

从数据库获得测验答案后,我在/ score页面上使用一些客户端JavaScript来计算用户的分数,然后将其报告给用户。但是,我希望将相同的分数归还给我的MongoDB,但我不确定如何最好地完成它。

我可以使用AJAX来实现这一目标,还是更好地重定向到新页面?

1 个答案:

答案 0 :(得分:1)

如果您已经使用Express,最简单的方法是定义更新分数的路线。然后,您可以通过AJAX将数据发送到服务器。 为了解析请求参数,请安装body-parser模块。

服务器:

var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.put('/score', stormpath.getUser, function (req, res) {
   console.log(req.body); // there should be your received data

  // save it to the database
  db.collection('yourcollection').updateOne(
      {}, // your query for updating the data in the wished field
      function(err, results) {
        if(err) { return res.json(err); }; 
        return res.json(results);
   });
}); 

客户端 - 如果您正在使用jQuery:

$.ajax({
    url: '/score',
    type: 'PUT',
    contentType: 'application/json',
    data: {'score':1000}, // put here your data to send it to the server
    success: function(data){
        console.log(data);
    }
});

一些文档:

MongoDB更新:https://docs.mongodb.com/getting-started/node/update/

jQuery AJAX:https://api.jquery.com/jquery.ajax/