【问题标题】:Node.js hanging when submitting form with jquery使用 jquery 提交表单时,Node.js 挂起
【发布时间】:2018-05-31 03:48:50
【问题描述】:

当我提交表单时,node.js 挂起,但它保存到 mongodb。请就我做错了什么提出建议,对节点很陌生。

index.js

router.post('/add-to-cart/:id', cartController.checkCart, cartController.createCart);

购物车控制器

exports.checkCart = async (req, res, next) => {

    const cart = await Cart.findOne({"owner": req.params.id});

    if (!cart){             
       return next();            
    }

    else{
        res.json(req.body);
    };

};   

exports.createCart = async (req, res) => {

    const createCart = new Cart({

        owner: req.params.id,
        status: 'open',
        products: {
            _id: req.body._id,
            quantity: req.body.quantity,
            price: req.body.price
        }
    });

    const newCart = await createCart.save();
};

jQuery

​​>
$(".submit").click(function(event){   

  $(".form").submit(req.body); 
  $(this).attr("class", "submit btn btn-success"); 
  event.preventDefault();                                                                                           
});

【问题讨论】:

  • 顺便跟jQuery没关系

标签: jquery node.js mongodb express


【解决方案1】:

exports.createCart 需要声明它已经完成。您应该添加next 函数参数并在末尾使用next() 调用它,或者使用res.json()、res.end()、res.send() 等返回一些内容。

如果没有其中任何一个选项,它将无限期挂起。您在第一个函数中完成的方式是正确的;只需将相同的东西应用于第二个。

【讨论】:

  • 谢谢,不过会转到下一页。
【解决方案2】:

您的第二个中间件没有指定next 回调。不幸的是,虽然 node 8 为我们带来了异步函数,但 express 仍然使用回调模式。因此,如果您的createCart 中间件中的响应没有结束或调用next,则请求/响应将不会完成。

在createCart 中尝试这样的事情:

exports.createCart = async (req, res, next) => {
  try {
    const createCart = new Cart({
      owner: req.params.id,
      status: 'open',
      products: {
        _id: req.body._id,
        quantity: req.body.quantity,
        price: req.body.price
      }
    });

    const newCart = await createCart.save();
    res.json(newCart);
  } catch (err) {
    next(err);
  }
};

【讨论】:

  • 我会试试这个
猜你喜欢
  • 2018-10-25
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多