没有在nodeJs中返回值的POST

时间:2016-02-07 18:50:46

标签: javascript node.js rest

我的客户端站点上有一个按钮,它向我的服务器发送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');
        })
    })
});

2 个答案:

答案 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.htmlsuccess_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
            }
         });
    }
});