【问题标题】:Model returns undefined property in post route but not get route模型在发布路由中返回未定义的属性但没有获取路由
【发布时间】:2019-11-15 23:45:58
【问题描述】:

在我的静态文件中:

    <form action="/confirm-purchase" method="post">
                <input type="text" id="name" class="form-control" required name="name">
                <input type="text" id="address" class="form-control" required name="address">
        <input type="submit" value="Send Order" class="btn btn-success">
    </form>

点击发送订单时,代码应该获取user对象和cart模型等数据,并将它们放入模型order中并保存到数据库中。

但是,当我单击 Send Order 时,页面上会出现一个错误,指出它无法读取未定义的属性 'cart' 并且错误来自我所在的行在post 路由中声明了变量cartsame 变量在 get 路由中,不知何故没有引起任何问题。

我做错了什么?

在我的路线中:

// get
router.get("/confirm-purchase", (req, res, next) => {
  if (!req.session.cart) {
    return res.render("shop/confirm-purchase", {products: null});
  }
  var cart = new Cart(req.session.cart);
  res.render("shop/confirm-purchase", {totalPrice: cart.totalPrice});
});

// post
router.post("/confirm-purchase", (res, req, next) => {
  var cart = new Cart(req.session.cart);
  if(!req.session.cart) {
    return res.redirect("/shopping-cart");
  }
  var order = new Order({
    user: req.user, //user is object placed by passport.js
    cart: cart,
    name: req.body.name,
    address: req.body.address
  });
  order.save(() => {
    req.flash("success", "Successfully bought product/s!");
    req.session.cart = null;
    res.redirect("/");
  });
});

我的购物车型号:

module.exports = function Cart(oldCart) {
    this.items = oldCart.items || {};
    this.totalQty = oldCart.totalQty || 0;
    this.totalPrice = oldCart.totalPrice || 0;

    this.add = function(item, id) {
      var storedItem = this.items[id];
      if (!storedItem) {
          storedItem = this.items[id] = {item: item, qty: 0, price: 0};
      }
      storedItem.qty++;
      storedItem.price = storedItem.item.price * storedItem.qty;
      this.totalQty++;
      this.totalPrice += storedItem.item.price;
    }

    this.generateArray = function() {
        var arr = [];
        for (var id in this.items) {
            arr.push(this.items[id]);
        }
        return arr;
    }
  };

我的订单型号:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var schema = new Schema({
    user: {type: Schema.Types.ObjectId, ref: "User"},
    cart: {type: Object, required: true},
    address: {type: String, required: true},
    name: {type: String, required: true}
});

module.exports = mongoose.model("orderSchema", schema);

【问题讨论】:

    标签: node.js post model schema express-session


    【解决方案1】:

    我终于解决了: getpost路由中的resreq参数是按不同的顺序写的。

    我的旧代码:

    // get
    router.get("/confirm-purchase", (req, res, next) => {/*...*/}
    
    // post
    router.post("/confirm-purchase", (res, req, next) => {/*...*/}
    

    应该是:

    // get
    router.get("/confirm-purchase", (req, res, next) => {/*...*/}
    
    // post
    router.post("/confirm-purchase", (req, res, next) => {/*...*/}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2020-08-16
      • 1970-01-01
      • 2019-02-15
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多