使用jquery提交表单时,Node.js挂起

时间:2017-12-17 17:26:47

标签: jquery node.js mongodb express

当我提交表单node.js挂起但保存到mongodb。请告知我做错了什么,对节点来说还是新手。

index.js

#!/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

cartController

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

JQuery的

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

2 个答案:

答案 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);
  }
};