Express,AJAX - res.send不发送任何数据

时间:2014-11-17 07:04:49

标签: javascript jquery ajax node.js express

我正在构建一个带有Node / Express / Mongo后端的应用程序,并在前端使用简单的jquery。

当我向服务器发出Ajax POST时,res.send似乎没有发送任何能够被POST成功函数捕获的数据。

这是我的前端AJAX代码 -

$(".signup-form").submit(function(e){

    var createUrl = $('.tutor-checkbox').is(':checked') ? serverUrls.createTutor : serverUrls.createStudent;
    var formInput = {
        email: $('#signup-email-input').val(),
        password: $('#signup-password-input').val(),
        first_name: $('#firstname-input').val(),
        last_name: $('#lastname-input').val()
    };

    formInput = JSON.stringify({
        user: formInput
    });

    $.ajax({
      url:createUrl,
      type:"POST",
      data: formInput,
      contentType:"application/json",
      dataType:"JSON",
      success: function(data){
        console.log("success: ", data);
        window.location = data.redirect;
      }
    })
    e.preventDefault();
})

浏览器控制台中的打印输出为:

success:  undefined main.js:45
Uncaught TypeError: Cannot read property 'redirect' of undefined main.js:46

我的服务器路由代码是:

app.post('/api/createtutor', function(req, res){

db.createUser(Tutor.model, req.body.user)
.then(function(data){

    var queryString = utils.serialize({
        first_name: req.body.user.first_name,
        last_name: req.body.user.last_name
    });

    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    res.status(304).send({
        redirect: "/tutor-profile-form?" + queryString
    });

})
.catch(function(err){
    res.status(404).end(JSON.stringify(err));
})

});

有人可以告诉我有什么问题吗?我已经坚持了很久!

提前非常感谢你。

2 个答案:

答案 0 :(得分:0)

e.preventDefault();

应该是第一行。所以:

$(".signup-form").submit(function(e){
    // This should be line one
    e.preventDefault();

    var createUrl = $('.tutor-checkbox').is(':checked') ? serverUrls.createTutor : serverUrls.createStudent;
   // etc etc
})

答案 1 :(得分:0)

我发现了问题:

问题是我在服务器上的承诺:

db.createUser(Tutor.model, req.body.user)
.then(function(data){

...

我使用Q库来宣传这个功能,由于某些原因,Express不喜欢它并且没有执行res.send。

我把它改回了正常的回调,但它确实有效。