我正在使用JavaScript、MongoDB和Node.js构建一个购物车。到目前为止,我已经能够保存该网站的所有产品、用户和会话。完成结帐表单后,我的输入应该保存到MongoDB。我应该能够在db集合中看到"orders“。但是,当我在命令行中输入show collections时,只会显示产品、用户、会话。
这是错误消息:
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)这是我的猫鼬模式:
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);这是我的index.js:
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;发布于 2017-03-09 06:32:21
所以,我就是这样解决这个错误的:
我安慰了order对象中的每个字段,并在我的checkout.form中发现了一个与req.body.address链接的语法错误。在修复错误之后,“order”现在显示在我的db集合中。
呼!感谢israel.zinc花时间和我聊天,了解问题的真相。
https://stackoverflow.com/questions/42640626
复制相似问题