当我提交表单node.js挂起但保存到mongodb。请告知我做错了什么,对节点来说还是新手。
#!/bin/bash
# ...code to create user...
#
# ..echo some sort of confirmation message
#
# then do nothing, no read, no case, just let if flow back to Menu.sh
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();
};
答案 0 :(得分:0)
exports.createCart
需要说明它已经完成。您应该添加next
函数参数,并使用next()
在最后调用它,或使用res.json()
,res.end()
,res.send()
等返回一些内容。 / p>
如果没有这些选项,它将无限期挂起。你在第一个函数中完成它的方式是正确的;只需将相同的东西应用到第二个。
答案 1 :(得分:0)
您的第二个中间件没有指定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);
}
};