[英]adding to an array of newly created object
我使用均值堆棧作為應用程序的后端。
要創建新對象,請使用POST。 創建該對象后,它將創建鏈接在一起的其他兩個對象。
恩。 我創建一個Book對象,在此過程中,將創建一個章節和頁面對象。 頁面對象添加到Chapter.pages,章節添加到Book.chapters。 嗯,至少這是我要嘗試的操作,但是我收到此錯誤。
錯誤:
Unhandled rejection TypeError: Cannot read property 'push' of undefined
at /Users//Documents/development/mean/lookback/server/api/book/book.controller.js:96:7
From previous event:
at create (/Users//Documents/development/mean/lookback/server/api/book/book.controller.js:88:6)
at Layer.handle [as handle_request] (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/layer.js:95:5)
at next (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/route.js:131:13)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:40:9)
at /Users//Documents/development/mean/lookback/server/auth/auth.service.js:38:11
From previous event:
at Middleware_Common_Object.<anonymous> (/Users//Documents/development/mean/lookback/server/auth/auth.service.js:33:10)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:59:18)
at /Users//Documents/development/mean/lookback/node_modules/express-jwt/lib/index.js:123:7
at /Users//Documents/development/mean/lookback/node_modules/async/lib/async.js:52:16
at Immediate.<anonymous> (/Users//Documents/development/mean/lookback/node_modules/async/lib/async.js:1206:34)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
對象書:
'use strict';
import mongoose from 'mongoose';
var BookSchema = new mongoose.Schema({
chapters:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'chapter'
}],
export default mongoose.model('Book', BookSchema);
章節:
'use strict';
import mongoose from 'mongoose';
var ChapterSchema = new mongoose.Schema({
pages: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Page'
}],
startDate: {
type: Date,
default: Date.now
},
endDate: {
type: Date,
},
book:{
type: mongoose.Schema.Types.ObjectId,
ref: 'Book'
}
});
export default mongoose.model('Chapter', ChapterSchema);
頁:
'use strict';
import mongoose from 'mongoose';
var PageSchema = new mongoose.Schema({
posts: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post',
}],
startDate: {
type: Date,
default: Date.now
},
endDate: {
type: Date
},
chapter: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Chapter'
}
});
export default mongoose.model('Page', PageSchema);
控制器:
export function create(req, res) {
return Book.create(req.body)
.then(book => {
var birthdate = new Date(req.body.birthdate);
var startDate = new Date(new Date().getFullYear() + 1, birthdate.getMonth(), birthdate.getDate(), 0, 0, 0);
var endDate = new Date(new Date().getFullYear() + 1, birthdate.getMonth(), birthdate.getDate() - 1, 23, 59, 59);
var chapter = Chapter.create({"book": book._id, "startDate": startDate, "endDate": endDate, pages: []});
var date = new Date();
endDate = new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59);
var page = Page.create({"chapter": chapter._id, "endDate": endDate});
chapter.pages.push(page._id);
book.chapters.push(chapter._id);
book.save()
.then(respondWithResult(res, 201))
.catch(handleError(res));
});
}
我試圖在推入數組之前初始化數組,但這也給了我一個錯誤。 book.chapters = []; Chapter.pages = [];
錯誤:
Unhandled rejection CastError: Cast to ObjectId failed for value "Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_trace:
{ Error
at Promise.longStackTracesCaptureStackTrace [as _captureStackTrace] (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/debuggability.js:397:19)
at Promise._resolveFromExecutor (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:478:10)
at new Promise (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:77:14)
at Function.create (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/model.js:1803:17)
at /Users//Documents/development/mean/lookback/server/api/book/book.controller.js:92:29
at tryCatcher (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
_parent:
{ Error
at Promise.longStackTracesCaptureStackTrace [as _captureStackTrace] (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/debuggability.js:397:19)
at Promise._then (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:231:17)
at Promise.then (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:124:17)
at create (/Users//Documents/development/mean/lookback/server/api/book/book.controller.js:88:6)
at Layer.handle [as handle_request] (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/layer.js:95:5)
at next (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/route.js:131:13)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:40:9)
at /Users//Documents/development/mean/lookback/server/auth/auth.service.js:38:11
at tryCatcher (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues (/Users//Documents/development/mean/lookback/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
_parent: [Object],
_promisesCreated: 0,
_length: 2,
_promiseCreated: [Circular] },
_promisesCreated: 0,
_length: 3,
_promiseCreated: null },
pages:
[ Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_trace: [Object] } ] }" at path "chapters"
at Function.create (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/model.js:1803:17)
at /Users//Documents/development/mean/lookback/server/api/book/book.controller.js:92:29
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
at create (/Users//Documents/development/mean/lookback/server/api/book/book.controller.js:88:6)
at Layer.handle [as handle_request] (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/layer.js:95:5)
at next (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/route.js:131:13)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:40:9)
at /Users//Documents/development/mean/lookback/server/auth/auth.service.js:38:11
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
at MongooseError.CastError (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/error/cast.js:26:11)
at ObjectId.cast (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/schema/objectid.js:147:13)
at Array._cast (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/types/array.js:125:32)
at Array._mapCast (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/types/array.js:296:17)
at Object.map (native)
at Array.push (/Users//Documents/development/mean/lookback/node_modules/mongoose/lib/types/array.js:309:25)
at /Users//Documents/development/mean/lookback/server/api/book/book.controller.js:99:21
From previous event:
at create (/Users//Documents/development/mean/lookback/server/api/book/book.controller.js:88:6)
at Layer.handle [as handle_request] (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/layer.js:95:5)
at next (/Users//Documents/development/mean/lookback/node_modules/express/lib/router/route.js:131:13)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:40:9)
at /Users//Documents/development/mean/lookback/server/auth/auth.service.js:38:11
From previous event:
at Middleware_Common_Object.<anonymous> (/Users//Documents/development/mean/lookback/server/auth/auth.service.js:33:10)
at next (/Users//Documents/development/mean/lookback/node_modules/composable-middleware/lib/composable-middleware.js:59:18)
at /Users//Documents/development/mean/lookback/node_modules/express-jwt/lib/index.js:123:7
at /Users//Documents/development/mean/lookback/node_modules/async/lib/async.js:52:16
at Immediate.<anonymous> (/Users//Documents/development/mean/lookback/node_modules/async/lib/async.js:1206:34)
at runCallback (timers.js:637:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
差不多了 您需要做的是推送實際的對象ID,而不是對象本身。
chapter.pages.push(頁); 到Chapter.pages.push(mongoose.Types.ObjectId(page._id));
book.chapters.push(章); 預訂.chapters.push(mongoose.Types.ObjectId(chapter._id));
export function create(req, res) {
return Book.create(req.body)
.then(book => {
var birthdate = new Date(req.body.birthdate);
var startDate = new Date(new Date().getFullYear() + 1, birthdate.getMonth(), birthdate.getDate(), 0, 0, 0);
var endDate = new Date(new Date().getFullYear() + 1, birthdate.getMonth(), birthdate.getDate() - 1, 23, 59, 59);
var chapter = Chapter.create({"book": book, "startDate": startDate, "endDate": endDate, pages: []});
var date = new Date();
endDate = new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59);
var page = Page.create({"chapter": chapter, "endDate": endDate});
chapter.pages.push(mongoose.Types.ObjectId(page._id));
book.chapters.push(mongoose.Types.ObjectId(chapter._id));
book.save()
.then(respondWithResult(res, 201))
.catch(handleError(res));
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.