node.js অ্যাপ্লিকেশনটিতে বাহ্যিক .js ফাইল অন্তর্ভুক্ত করুন


98

আমার কাছে একটি app.js নোড অ্যাপ্লিকেশন রয়েছে। এই ফাইলটি বাড়তে শুরু করার সাথে সাথে আমি কোডের কিছু অংশ অন্য কিছু ফাইলগুলিতে সরিয়ে নিতে চাই যা অ্যাপ.জেএস ফাইলগুলিতে আমার "প্রয়োজনীয়" বা "অন্তর্ভুক্ত" হবে।

আমি এই জাতীয় জিনিস চেষ্টা করছি:

// Declare application
var app = require('express').createServer();

// Declare usefull stuff for DB purposes
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

// THE FOLLOWING REQUIRE DOES NOT WORK
require('./models/car.js');

car.js এ:

// Define Car model
CarSchema = new Schema({
  brand        : String,
  type : String
});
mongoose.model('Car', CarSchema);

আমি ত্রুটি পেয়েছি:

ReferenceError: Schema is not defined

আমি কেবল car.js এর সামগ্রীটি লোড করার জন্য খুঁজছি (একই অ্যাপ্লিকেশনটিতে সমস্ত কিছু রাখার পরিবর্তে) js ফাইলে) নোড.জেএসগুলিতে এটি করার কোনও বিশদ উপায় আছে কি?


4
স্কিমার সেই সুযোগে অস্তিত্ব নেই। আপনি কোনও ধরণের রফতানি ফাংশন দিয়ে গাড়ি.জেজে স্কিমার পাশ দিয়ে যাওয়ার চেষ্টা করতে পারেন, এইভাবে আপনি এটি উল্লেখ করতে পারেন। এটি বা car.js এর মধ্যে মঙ্গুসের প্রয়োজন
রবার্ট

4
নোড.জেএস কমনজেএস ব্যবহার করে, যা আপনার কোডকে বিভিন্ন মডিউলে বিভক্ত করে। থাম্বের দ্রুত নিয়ম, নোড অ্যাপ্লিকেশনটিতে কোডের সুযোগটি সেই ফাইলটিকেই সংজ্ঞায়িত করা হয়েছে So সুতরাং আপনার জন্য car.js, এবং car.js এ মংগুসের প্রয়োজন হবে আপনার অ্যাপ্লিকেশনটির বাকি যা কিছু রফতানি করতে হবে will আপনার মূল ফাইলে এটি করা দরকার যেমন আপনি করছেন।
ম্যাট গ্রেয়ার

উত্তর:


100

var fooশীর্ষ স্তরে প্রত্যেকে যা বলছে তার উপরে জোর দেওয়ার জন্য বৈশ্বিক পরিবর্তনশীল তৈরি হয় না। আপনি যদি বিশ্বব্যাপী পরিবর্তনশীল চান তবে লিখুন global.foo। তবে আমরা সবাই জানি গ্লোবালগুলি মন্দ।

আপনি যদি এমন কেউ হন যে নোড.জেএস প্রকল্পে আমি গ্লোবালগুলি ব্যবহার করি তবে আমি তাদের রিফ্যাক্টর করব কারণ এর জন্য খুব কম ব্যবহারের কেস রয়েছে (কয়েকটি ব্যতিক্রম রয়েছে তবে এটি এক নয়)।

// Declare application
var app = require('express').createServer();

// Declare usefull stuff for DB purposes
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

require('./models/car.js').make(Schema, mongoose);

car.js এ

function make(Schema, mongoose) {
    // Define Car model
    CarSchema = new Schema({
      brand        : String,
      type : String
    });
    mongoose.model('Car', CarSchema);
}

module.exports.make = make;

32
যে কারও পড়ার জন্য টিপস, আপনি কেবল এক্সপোর্ট.ফু করতে পারেন, তারপরে মডিউল.এক্সপোর্টস.ফু
টাইলার ইজেটো

9
@ টাইলার এজেটও আমি যদি আরও দীর্ঘ সংস্করণ ব্যবহার করি তবে আমি সর্বদা নিরাপদ বোধ করি;)
রায়নস

4
আপনি কীভাবে মূল অ্যাপ্লিকেশনটিতে car.js এর ভিতরে সংজ্ঞায়িত ভেরিয়েবলগুলি ব্যবহার করতে পারেন তা দেখানোর জন্য দয়া করে উদাহরণটি প্রসারিত করবেন? যেমন `ফাংশন মেক (...) {... কারমোডেল = মঙ্গুজ.মডেল ('গাড়ি', কারস্কেমা); `The অ্যাপের অভ্যন্তরে, কেউ কীভাবে কারমোডেল ব্যবহার করবে?
মারিয়াস

:)) ঠিক আছে, ফাংশনের ভিতরে একাধিক ভার সেট করার সময় কীভাবে? যেমন একাধিক মডেল, বা এমনকি 3 মডেল, এবং 2 কিছু এলেস? সেগুলিকে কোনও বস্তুর অংশ হিসাবে ফিরিয়ে দেওয়া উচিত? উদাহরণস্বরূপreturn {models: {car: CarModel, dealer: CarDealer}, carStuff: carStuff}
মারিয়াস

57

সঠিক উত্তরটি সাধারণত প্রয়োজন হয় তবে কয়েকটি ক্ষেত্রে এটি সম্ভব হয় না।

নিম্নলিখিত কোডটি কৌতুকটি করবে তবে যত্ন সহকারে এটি ব্যবহার করুন:

var fs = require('fs');
var vm = require('vm');
var includeInThisContext = function(path) {
    var code = fs.readFileSync(path);
    vm.runInThisContext(code, path);
}.bind(this);
includeInThisContext(__dirname+"/models/car.js");

4
এটির সাথে সমস্যাটি হ'ল: "রানিং কোডের স্থানীয় সুযোগে অ্যাক্সেস নেই।" nodejs.org/api/vm.html#vm_vm_runinthiscontext_code_filename
মধ্যে Petah

এটি কি মত #include?
স্টিভেন লু

18

সংক্ষিপ্ত উত্তর:

// lib.js
module.exports.your_function = function () {
  // Something...
};

// app.js
require('./lib.js').your_function();

এটি আমার জন্য কাজ করছে না। আমি ভুল পাচ্ছি Cannot find module lib.js
মনোজ

4
@ মনোজ আপনাকে। / এর মত লাইব.জেএস সহ উপস্থাপন করতে হবে:require('./lib.js').your_function()
ক্রিস

8

তুমি রাখতে পারো

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

এটি কাজ করার জন্য আপনার car.js ফাইলের শীর্ষে বা রায়নস যা করতে বলেছিল তা করতে পারেন।


4

আপনি যদি কেবল কমান্ড লাইন থেকে একটি লাইব্রেরি পরীক্ষা করতে চান তবে আপনি এটি করতে পারেন:

cat somelibrary.js mytestfile.js | node

0

এই পদ্ধতিটি নোড.জেজে আমার জন্য কাজ করে, এটির কোনও সমস্যা আছে কি ?

ফাইল 'समावेश.js':

fs = require('fs');

ফাইল 'main.js':

require('./include.js');

fs.readFile('./file.json', function (err, data) {
    if (err) {
        console.log('ERROR: file.json not found...')
    } else {
        contents = JSON.parse(data)
    };
})

এটা ভুল. "fs" কখনই রফতানি হয় না!
ES6-
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.