我的客户端站点上有一个按钮,它向我的服务器发送POST请求。在这个请求中,我没有必要返回任何内容,因为它只是在我的数据库中插入。但是,在单击按钮后,我的客户端一直等待答案,直到失败。但我不想退回任何内容,因为我不希望页面被刷新。如何管理?
仅供参考我的服务器在nodejs中,我的客户端在EJS / html / common js中,我的数据库是mongoDb。如果可能的话,我宁愿只保留这些技术。
[编辑]我想要执行的是跟踪服务。每次用户单击按钮时,都会在数据库中插入数据。在它的一侧,按钮只启动音乐播放。
感谢。
我的客户代码摘录:
<form style="display:inline;" action="/genre" method="POST">
<input type="hidden" name="genre" value='<%= musicFile.genre %>' />
<input onclick="play('audioPlayer', '<%= musicFile.path %>')"" type="submit" value="Play" />
</form>
我的服务器代码摘录:
router.post('/genre', function(req, res)
{
var genre = req.body.genre;
console.log('POST genre')
console.log(genre)
if (!genre) return;
Genre.findOne({'genre' : genre}, 'number', function(err, res)
{
var nb = 1;
if (err) return handleError(err);
if (res) nb = res.number + 1;
Genre.update({'genre' : genre}, {'number' : nb}, {upsert : true}, function(err, res)
{
if (err) return handleError(err);
console.log('Updated genres collection - Genre ' + genre + ' listened ' + nb + 'times');
})
})
});
答案 0 :(得分:0)
您必须始终返回状态。您的客户正在等待POST是否成功或是否失败。您不必返回任何数据。
如果POST成功,则应返回200。
Genre.update({'genre' : genre}, {'number' : nb}, {upsert : true}, function(err, res)
if (err) return handleError(err);
res.status(200).send() // I'm not sure you will need the .send()
答案 1 :(得分:0)
您需要呈现error.html
,success_page.html
个文件(根据示例),在提交表单后,expressJS会处理所有数据库查询,并将文件作为结果呈现。你的增量也很重,使用内置的$inc
运算符,所以最后你只有1个数据库请求
//submitted from submit-form.html
router.post('/genre', function(req, res) {
var genre = req.body.genre;
if (!genre) {
//render error.html (or .ejs file)
return res.render('error', {message: 'No gender selected'});
} else {
//update gender with $inc operator
Genre.update({'genre': genre}, {$inc: {number: 1}}, function(updateError, updateResult) {
if (updateError) {
res.render('error', err);
} else {
//render success_page.html (or .ejs file)
//res.render('success_page');
//or render current form submit-form.html instead
res.render('submit-form', {genderUpdated: true}); //use genderUpdated for custom behavior
}
});
}
});