我将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来实现这一目标,还是更好地重定向到新页面?
答案 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/