2017-03-07 23 views
1

Ich baue einen Einkaufswagen mit JavaScript, MongoDB & Node.js. Ich war in der Lage, alle Website-Produkte, Benutzer & Sitzungen bis jetzt zu speichern. Nachdem ich mein Checkout-Formular ausgefüllt habe, sollten meine Eingaben in MongoDB gespeichert werden. Ich sollte "Bestellungen" unter den db-Sammlungen sehen können. Aber wenn ich show collections in die Befehlszeile eintippe, werden nur Produkte, Benutzer, Sitzungen angezeigt.Mongoose nicht speichern von Daten zu mongodb?

Dies ist die Fehlermeldung:

ValidationError: Order validation failed 
    at MongooseError.ValidationError (/Users/vynguyen/shopping-cart/node_modules/mongoose/lib/error/validation.js:23:11) 
    at model.Document.invalidate (/Users/vynguyen/shopping-cart/node_modules/mongoose/lib/document.js:1524:32) 
    at /Users/vynguyen/shopping-cart/node_modules/mongoose/lib/document.js:1399:17 
    at validate (/Users/vynguyen/shopping-cart/node_modules/mongoose/lib/schematype.js:706:7) 
    at /Users/vynguyen/shopping-cart/node_modules/mongoose/lib/schematype.js:750:9 
    at Array.forEach (native) 
    at SchemaString.SchemaType.doValidate (/Users/vynguyen/shopping-cart/node_modules/mongoose/lib/schematype.js:711:19) 
    at /Users/vynguyen/shopping-cart/node_modules/mongoose/lib/document.js:1397:9 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 

Das ist mein Mongoose Schema:

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}, 
    paymentId: {type: String, required: true} 
}); 

module.exports = mongoose.model('Order', schema); 

Das ist mein index.js ist:

var express = require('express'); 
var router = express.Router(); 
var Cart = require('../models/cart'); 

var Product = require('../models/product'); 
var Order = require('../models/order'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    var successMsg = req.flash('success')[0]; 
    Product.find(function(err, docs) { 
     var productChunks = []; 
     var chunkSize = 3; 
     for (var i = 0; i < docs.length; i += chunkSize) { 
      productChunks.push(docs.slice(i, i + chunkSize)); 
     } 
     res.render('shop/index', { title: 'Shopping Cart', products: productChunks, successMsg: successMsg, noMessages: !successMsg}); 
    }); 
}); 

router.get('/add-to-cart/:id', function(req, res, next) { 
    var productId = req.params.id; 
    var cart = new Cart(req.session.cart ? req.session.cart : {}); 

    Product.findById(productId, function(err, product){ 
     if (err) { 
      return res.redirect('/'); 
     } 
     cart.add(product, product.id); 
     req.session.cart = cart; 
     res.redirect('/'); 
    }); 
}); 

router.get('/shopping-cart', function(req, res, next) { 
    if (!req.session.cart) { 
     return res.render('shop/shopping-cart', {products: null}); 
    } 
    var cart = new Cart(req.session.cart); 
    res.render('shop/shopping-cart', {products: cart.generateArray(), totalPrice: cart.totalPrice}); 
}); 

router.get('/checkout', function(req, res, next) { 
    if (!req.session.cart) { 
     return res.redirect('/shopping-cart'); 
    } 
    var cart = new Cart(req.session.cart); 
    var errMsg = req.flash('error')[0]; 
    res.render('shop/checkout', {total: cart.totalPrice, errMsg: errMsg, noError: !errMsg}); 
}); 

router.post('/checkout', function(req, res, next) { 
    if (!req.session.cart) { 
     return res.redirect('/shopping-cart'); 
    } 
    var cart = new Cart(req.session.cart); 

    var stripe = require("stripe")(
     "**hidden**" 
    ); 

    stripe.charges.create({ 
     amount: cart.totalPrice * 100, 
     currency: "usd", 
     source: req.body.stripeToken, 
     description: "Test Charge" 
    }, function(err, charge) { 
     if (err) { 
      req.flash('error', err.message); 
      return res.redirect('/checkout'); 
     } 
     var order = new Order({ 
      user: req.user, 
      cart: cart, 
      address: req.body.address, 
      name: req.body.name, 
      paymentId: charge.id 
     }); 
     order.save(function(err, result) { 
      req.flash('success', 'Successfully bought product!'); 
      req.session.cart = null; 
      res.redirect('/'); 
     }); 
    }); 
}); 

module.exports = router; 
+0

Was ist die Fehlermeldung? –

+0

Es gibt keins. Nach dem An- und Abmelden kann ich die Daten in meiner Mongo-Shell (nach dem Aufruf von db.orders.find()) nicht sehen – vnguyen

+0

Haben Sie versucht, Fehler und Ergebnis zu drucken? –

Antwort

0

Also, das ist, wie ich löste den Fehler:

Ich tröstete jedes Feld innerhalb des Auftragsobjekts und fand einen Syntaxfehler in meiner checkout.form, der mit req.body.address verknüpft ist. Nach dem Beheben des Fehlers wird nun 'order' in meinen db collections angezeigt.

Puh! Ein Dankeschön an israel.zinc, dass du Zeit mit mir verbracht hast, um dem Problem auf den Grund zu gehen.

Verwandte Themen