![](/img/trans.png)
[英]jquery not updating handlebars partial view correctly when submitting a form (express, node.js)
[英]Node.js hanging when submitting form with jquery
當我提交表單時,node.js會掛起,但會保存到mongodb。 請提出關於我做錯了的建議,這對節點來說還是很新的。
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();
};
$(".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.