簡體   English   中英

使用jQuery提交表單時掛起Node.js

[英]Node.js hanging when submitting form with jquery

當我提交表單時,node.js會掛起,但會保存到mongodb。 請提出關於我做錯了的建議,這對節點來說還是很新的。

index.js

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

cartController

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

exports.createCart需要聲明已完成。 您應該添加next函數參數並在其末尾使用next()調用它,或者使用res.json()res.end()res.send()等返回值。

如果沒有這些選項中的任何一個,它將無限期地掛起。 您在第一個函數中完成此操作的方式是正確的; 只需對第二個應用相同的內容。

您的第二個中間件沒有指定next回調。 不幸的是,盡管節點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);
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM