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

Express, AJAX - res.send not sending any data

本文关键字:任何 数据 send AJAX res Express      更新时间:2023-09-26

我正在构建一个带有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));
})

});

有人可以让我知道出了什么问题吗?我已经坚持了很长时间了!

提前非常感谢你。

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
})

我想出了问题:

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

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

我使用 Q 库来承诺函数,出于某种原因,Express 不喜欢它,也没有执行 res.send。

我将其改回普通回调,它起作用了。