私はアプリケーションのバックエンドとして平均スタックを使用しています。新しく作成されたオブジェクトの配列に追加する
新しいオブジェクトを作成するには、POSTを使用します。そのオブジェクトが作成されると、一緒にチェーンされた2つの他のオブジェクトが作成されます。
ex。ブックオブジェクトを作成し、そのプロセスで章とページオブジェクトが作成されます。ページオブジェクトは章ページに追加され、章は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);
Page:
'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)
ありがとうございます。あなたが提案した変更を反映させるためにコードを更新しました。しかし、私はまだ同じエラーを受けています。 – cohs
Ah idをオブジェクトに変換するには、mongoose.Types.ObjectId(chapter._id)に_idをカプセル化してください。 –