У меня возникли проблемы с использованием Restangular для обновления существующего документа (products
) в моей базе данных Mongodb с новым объектом reviews
. Пока что я могу добавить обзор в интерфейсный центр без каких-либо проблем, но мне трудно опубликовать данные обзора в моей базе данных. В настоящее время, когда я отправляю новый review
, мой код создает новый ключ в моей коллекции products
, но не сохраняет информацию о просмотре. Как я могу нажать обзор на сервер? Пожалуйста, дайте мне знать, если мне нужно предоставить какие-либо дополнительные данные или разъяснения. Любая помощь будет оценена.Restangular POST a Mongoose Embedded Document
Пример JSON продукта
{"_id":"xxxxx","name":"Product 1","description":"Product 1 Description","price":"1299.99","createdOn":"143767117903", "reviews":[{}]}
После добавления обзора это то, что мой JSON выход моего нового обзора
{"__v":0,"_id":"xxxxxx"}
Это то, что я ожидал увидеть в мой выход JSON
{"__v":0,"_id":"xxxxxx","stars":4,"body":"Test review","author":"[email protected]","createdOn":143767117903}
Детали проекта
Я использовал YEOMAN угловой генератор, так что я есть server
и А client
каталогов. Я использую MongoDB
, MongooseJS
, ExpressJS
, AngularJS
и NodeJS
. Насколько я знаю, мои серверные маршруты для моих продуктов работают, так как я могу просматривать все продукты, добавлять продукт, просматривать продукт (включая любые обзоры, связанные с продуктом), и, по крайней мере, добавлять пустой обзор.
У меня есть схема products
, которая включает в себя встроенный документ в схему reviews
.
Продукты Схема
/**
* Schema for Products
*/
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var productSchema = new Schema({
name: {
type: String,
require: true,
},
description: {
type: String,
require: true,
},
shine: {
type: Number,
require: true,
},
price: {
type: Number,
require: true,
},
rarity: {
type: Number,
require: true,
},
color: {
type: String,
require: true,
},
faces: {
type: Number,
require: true,
},
images: {},
reviews: [{type: mongoose.Schema.Types.ObjectId, ref: 'Review'}],
createdOn: {
type: Date
}
});
var Product = mongoose.model('Product', productSchema);
module.exports = Product;
Отзывы Схема
/**
* Schema for Product Reviews
*/
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var reviewSchema = new Schema({
stars: {
type: Number
},
review: {
type: String
},
author: {
type: String
},
createdOn: {
type: Date
}
});
var Review = mongoose.model('Review', reviewSchema);
module.exports = Review;
Продукция Отзывы Контроллер
(function() {
'use strict';
/**
* @ngdoc function
* @name gemStoreApp.controller:ReviewCtrl
* @description
* # ReviewCtrl
* Controller of the gemStoreApp
*/
angular.module('gemStoreApp')
.controller("ReviewCtrl", ['$scope', 'Restangular', 'productsService', function ($scope, Restangular, productsService) {
this.review();
this.addReview = function(product){
this.review.createdOn = Date.now();
var productReview = Restangular.all('/products/' + product._id + '/reviews');
productReview.post(product).then(function(newResource){
});
};
})();
Продукция Сервис
(function() {
'use strict';
/**
* @ngdoc service
* @name gemStoreApp.productService
* @description
* # productService
*/
angular.module('gemStoreApp.productService',['ngResource'])
.factory('productsService', function($resource) {
return $resource('/products/:id', {id:'@id'},{
'update': { method: 'PUT'}
});
});
})();