2016-09-12 10 views
0

ExpressとMongoDBでNode.jsを使用しています。ページが読み込まれた後に計算される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); 
    }); 
}); 

DBからクイズの答えを取得した後、私は、ユーザーのスコアを計算し、ユーザーにそれを報告する/楽譜のページにいくつかのクライアント側のJavaScriptを使用しています。しかし、同じスコアを私のMongoDBに戻したいのですが、それをどのように達成するのが最善かどうかはわかりません。

これを達成するためにAJAXを使用することはできますか、新しいページにリダイレクトする方がよいでしょうか?

+0

スコア計算をサーバー側で行うことができる場合は、それをデータベースに保存してから、あらかじめ計算したスコアをフロントエンドに戻します。 1つのリクエストで、これすべて。 –

+0

フロントエンドで実際に計算を行う必要がある場合は、効果的にajaxを使用して別のURLにデータを返すことができます。 –

答えて

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/

関連する問題