jQuery忽略Express的状态代码

时间:2014-12-07 22:16:57

标签: javascript jquery ajax post express

我正在创建一个必须使用AJAX验证表单的应用程序。没什么太花哨的。触发表单提交时,我将发布到Node.js服务器上的URL并使用Express进行路由。如果数据未通过所有验证要求,我发送的状态代码为400,如下所示:

app.post('/create', checkAuth, function (req,res)
{
    var errors = new Errors();

    if (req.body['game-name'].length < 3 || req.body['game-name'].length > 15)
    {
        res.send({
            msg: 'Game name must be between 3 and 15 characters.'
        }).status(500).end();
    }
    else
    {
        GameModel.find({id: req.body.roomname}, function (err,result)
        {
            if (result.length !== 0)
            {
                errors.add('A game with that name already exists.');
            }

            //Some more validation

            if (errors.get().length > 0)
            {
                res.status(400).send({
                    msg: errors.get()[0]
                }).end();

                return;
            }
            else
            {
                var data = new GameModel({
                    roomname: req.body['roomname'],
                    owner: req.session.user,
                    id: req.body['roomname'].toLowerCase(),
                    config: {
                        rounds: req.body['rounds'],
                        timeLimit: req.body['time-limit'],
                        password: req.body['password'],
                        maxplayers: req.body['players'],
                        words: words
                    },
                    finished: false,
                    members:
                    [
                        req.session.user
                    ]
                });

                data.save(function (err, game)
                {
                    if (err) {
                        console.log(err);
                        res.send({
                            msg: 'Something funky happened with our servers.'
                        }).status(500).end();
                    }
                    else
                    {
                        res.send({
                            msg: 'All good!'
                        }).status(200).end();
                    }
                });
            }
        });
    }
});

在客户端,我有以下代码:

$.ajax({
    type: "POST",
    url: "/someURL",
    data: $("form").serialize(),
    statusCode:
    {
        200: function (data)
        {
            //All good.
        },
        400: function (data)
        {
            //Uh oh, an error.
        }
    }
});

奇怪的是,每当我发送400错误时,jQuery就会调用200函数。我相信这是因为我发送了一个对象和状态代码。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

首先猜测您需要在return;块内的快速代码中使用if语句。我打赌错误代码正在运行,然后成功代码和statusCode / body的最后一个值被发送到浏览器。