প্রয়োজনীয় একটি খালি বস্তু ফেরত দেয়


125

আমার একটি ফোল্ডার রয়েছে, এতে সূচি.জেএস এবং কয়েকটি মডেল (ক্লাস) সূচি.জেএস রয়েছে

module.exports = {
   Book : require('./book'),
   Author : require('./author')
}

book.js

var Author = require('./author')
var Book = models.ActiveRecord.extend({
    schema : {
        belongsTo : {
            author : Author
        }
    }
})
module.exports = Book

author.js

var Book = require('./book')
var Author = models.ActiveRecord.extend({
    schema : {
        hasMany : {
            author : Book
        }
    }
})

module.exports = Author

সমস্যাটি হচ্ছে লেখক শ্রেণি বইটি খুঁজে পায় না বলে মনে হয়! এটি কেবল একটি খালি অবজেক্ট। যাইহোক, যদি আমি রেকর্ডের পরে বুক রেখে লেখককে index.js এ রফতানি পরিবর্তন করি - এটি কাজ করে তবে অন্য মডেল কাজ করা বন্ধ করে দেয়।

আমি এটিকে কাজ করতে কোনও হ্যাক করতে চাই না।


4
Writer.js চালানোর জন্য Book.js দরকার, এবং Book.js চালানোর জন্য Writ.js দরকার? বিজ্ঞপ্তি নির্ভরতা অপসারণ।
— ফিলিপ গায়ারেট 26'14

1
অ্যাক্টিভেকর্ড অবজেক্টটি কী? কোথা থেকে এসেছ?
— বিটি

উত্তর:


207

আপনার বৃত্তাকার নির্ভরতা কারণ এটি have নোড.জেএস এটি খুব নির্দিষ্ট উপায়ে পরিচালনা করে:

  1. প্রথম মডিউল লোড হয় এবং রান হয় (এই ক্ষেত্রে, book.js)। এটি ( book.js) দ্বিতীয় মডিউলটি লোড করে এবং চালিত করবে ( author.js) যখন এটি ( book.js) এর জন্য অন্য ( author.js) প্রয়োজন

  2. যখন দ্বিতীয় মডিউল ( author.js) লোড করা এবং চালানো হয় তখন এটি ( author.js) প্রথম মডিউল প্রয়োজন ( book.js) তবে এটি ( author.js) একটি আংশিক ভরাট বস্তুটি গ্রহণ করবে - তবে book.js এ রফতানির জন্য অনেক কিছুই সেট করা হয়েছিল লেখকের প্রয়োজনের আগেই। যে বস্তু হতে

  3. book.jsসম্পূর্ণরূপে চলার পরে , যে বস্তুটি author.jsপেয়েছিল require('./book')তা পূর্ণ book.jsমডিউল অবজেক্ট হবে

আরও তথ্যের জন্য, এখানে ডক্স রয়েছে: http://nodejs.org/api/modules.html

যদি সেই অ্যাক্টিভেকর্ড অবজেক্টগুলির মধ্যে একটিতে এই স্কিমাটিকে গতিশীলভাবে যুক্ত করা সম্ভব হয়, তবে এটি সমাধানের এক উপায়। এটি আসলে এক ধরণের পরিস্থিতি। আসলে, এমনকি মডিউল সিস্টেমটি না থাকলেও এটি আপনার সমস্যার কারণ হতে পারে। আপনি যদি এই সমস্ত কোডটি একটি ফাইলে রাখেন তবে আপনি কীভাবে এটি কাজ করবেন?


1
আমি জানি আপনার সব কিছু একটি ফাইলে রাখা উচিত নয়, তবে আমি বলছি যে কেবল এটির মতো পরীক্ষা করা। আমার বক্তব্যটি হ'ল এটি নোড.জেএস এর মডিউল সিস্টেম নয় যা এখানে সমস্যা তৈরি করছে, এটি কোডটি নিজেই।
— বিটি

এবং প্রকৃতপক্ষে, জাভা সার্কুলার নির্ভরতার সাথে একই সমস্যা রয়েছে - এটি যে কোনও ভাষাতেই সমস্যা হতে পারে। আপনার যা যা দরকার তা হ'ল আপনার বিজ্ঞপ্তি নির্ভরতা অংশীদারের একটি রেফারেন্স, জাভাস্ক্রিপ্ট জাভা হিসাবে খুব সহজেই এটি করতে পারে। তবে, এখানে, আপনি অবজেক্টটি নির্মিত হওয়ার আগে ব্যবহারের চেষ্টা করছেন (প্রসারিত)
— বিটি

হ্যাঁ, আসলে এখন আমি এটি বুঝতে পেরেছি। মনে কখনই আসেনি। সুতরাং, কেবল একটি উপায় আছে - এটি গতিশীলভাবে যুক্ত করার জন্য, আমার ধারণা। বা একটি স্ট্রিং হিসাবে একটি মডেল নাম পাস। আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ!
— user3677173

18
আমি আরও জটিল ক্ষেত্রে (যেমন আরও ফাইল সহ) এই ধরণের সমস্যাগুলি ডিবাগ করার জন্য ম্যাডেজকে অত্যন্ত প্রস্তাব দিই । ইনস্টল হয়ে গেলে আপনি madge -c <app entry point>কোনও বিজ্ঞপ্তি নির্ভরতা সনাক্ত করতে ব্যবহার করতে পারেন ।
— schu34

7
ধন্যবাদ। অত্যন্ত বেদনাদায়ক যে এটি কোনও ত্রুটি এমনকি ছুঁড়ে না ফেলে কেবল একটি খালি বস্তুও দেয়।
— রবার্ট ওশলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.