নোড.জেএস-এ অন্য ফাইল থেকে জাভাস্ক্রিপ্ট শ্রেণীর সংজ্ঞা সহ


115

আমি নোড.জেএস এর জন্য একটি সাধারণ সার্ভার লিখছি এবং আমি নিজের ক্লাসটি ব্যবহার করছি Userযা বলে মনে হচ্ছে:

function User(socket) {
    this.socket = socket;
    this.nickname = null;

    /* ... just the typical source code like functions, variables and bugs ... */

    this.write = function(object) {
        this.socket.write(JSON.stringify(object));
    }
};

এবং তারপরে প্রক্রিয়াটির পরে আমি এটিকে প্রচুর পরিমাণে ইনস্ট্যান্ট করছি:

var server = net.createServer(function (socket) {
    /* other bugs */
    var user = new User(socket);
    /* more bugs and bad practise */
});

আমি কি আমার Userশ্রেণির সংজ্ঞাটিকে অন্য জাভাস্ক্রিপ্ট ফাইলটিতে সরিয়ে নিয়ে এটি "অন্তর্ভুক্ত" করতে পারি?

উত্তর:


202

আপনি কেবল এটি করতে পারেন:

user.js

class User {
    //...
}

module.exports = User

server.js

const User = require('./user.js')

// Instantiate User:
let user = new User()

একে বলা হয় কমনজেএস মডিউল।

একাধিক মান রফতানি করুন

কখনও কখনও এটি একাধিক মান রফতানি করতে কার্যকর হতে পারে। উদাহরণস্বরূপ এটি ক্লাস, ফাংশন বা ধ্রুবক হতে পারে:

user.js

class User {}

exports.User = User
exports.ROLE_ADMIN = 'admin'
exports.ROLE_USER = 'user'
export.isValidUser = function isValidUser() {
    // ...
}

server.js

const {User, ROLE_ADMIN, ROLE_USER, isValidUser} = require('./user.js')

// Instantiate User:
let user = new User()

ইএস মডিউলগুলি

নোড.জেএস সংস্করণ ১৪ যেহেতু সাধারণ জেএস সহ ইএস মডিউলগুলি ব্যবহার করা সম্ভব। ইএসএম ডকুমেন্টেশনে এটি সম্পর্কে আরও পড়ুন ।

এটি এটি ESM এর সাথে প্রয়োগ করা একই আচরণের একটি উদাহরণ:

package.json

{
  "type": "module"
}

user.js

export default class User {}

server.js

import User from './user.js'

let user = new User()

বিঃদ্রঃ

Glo গ্লোবালগুলি ব্যবহার করবেন না, এটি ভবিষ্যতের কোডের সাথে সম্ভাব্য দ্বন্দ্ব তৈরি করে।


কী যদি, ব্যবহারকারীর কিছু ইনপুট প্যারামিটার থাকে, যেমন মডিউল.এক্সপোর্টস = ফাংশন ব্যবহারকারী (ডেটা)। তারপরে var ব্যবহারকারী = নতুন ব্যবহারকারী (); কে পরিবর্তিত হয়েছে var ব্যবহারকারী = নতুন ব্যবহারকারী (ডেটা) ;?
সি গ্রাফিক্স

হ্যাঁ. Userসাধারণ জেএস ফাংশন।
পল রুমকিন

2
আপনার সার্ভার.জেজে ধ্রুবক ব্যবহারকারী তৈরি করার দরকার নেই। ব্যবহারকারীদের শেষ পংক্তিতে পরিবর্তন করুন। Js module.exports = new User();প্রতিটি বার মডিউলটি প্রয়োজন হলে এটি ব্যবহারকারীর একটি নতুন উদাহরণ তৈরি করবে। তারপর কেবল আপনি ভালো প্রতিটি পরিবর্তনশীল জন্য মডিউল প্রয়োজন হতে পারে: let user = require('./user.js');
নদভ

1
@ বার্ন্যাক আমার বেশ কয়েকটি উত্তর আছে। কোনটি ভুল এবং কোনটি সঠিক?
পল রুমকিন

1
@ পাশাআরমকিন স্থানীয়ভাবে অবজেক্টটি ইনস্ট্যান্ট করুন, তবে আমি টাইপ এরির পেয়েছি: <ক্লাসনাম> কোনও নির্মাণকারী নয়
মোঃ আলামিন

13

ES6 ব্যবহার করে, আপনি থাকতে পারেন user.js:

export default class User {
  constructor() {
    ...
  }
}

এবং তারপরে এটি ব্যবহার করুন server.js

const User = require('./user.js').default;
const user = new User();

আমি একটি পেতে SyntaxError: Unexpected token exportযখন আমি কি হিসাবে আপনি বর্ণনা ... আমি নোড সংস্করণ আছেv10.16.3
টমাস

6

এটি পড়তে আপনার শ্রেণীর সংজ্ঞাটি সংশোধন করুন:

exports.User = function (socket) {
  ...
};

তারপরে ফাইলটির নাম পরিবর্তন করুন user.js। এটি আপনার মূল স্ক্রিপ্টের মূল ডিরেক্টরিতে রয়েছে বলে ধরে নিলে আপনি এটি এর মতো অন্তর্ভুক্ত করতে পারেন:

var user = require('./user');
var someUser = new user.User();

এটি দ্রুত এবং নোংরা সংস্করণ। আপনি আরও জানতে চাইলে সাধারণ জেএস মডিউলগুলি সম্পর্কে পড়ুন ।


2
সকেটের কী হল? এটি ভেরু ইউজার = নতুন ইউজার / ইউজার (সকেট) হওয়া উচিত;
সি গ্রাফিক্স

5

ES6 এর জন্য এখানে সরবরাহিতগুলি ছাড়াও অন্য একটি উপায়

module.exports = class TEST{
    constructor(size) {
        this.map = new MAp();
        this.size = size;

    }

    get(key) {
        return this.map.get(key);
    }

    length() {
        return this.map.size;
    }    

}

এবং হিসাবে একই অন্তর্ভুক্ত

var TEST= require('./TEST');
var test = new TEST(1);

1

আপনি যদি এতে যুক্ত হন user.js:

exports.User = User;

তারপরে server.jsআপনি এটি করতে পারেন:

var userFile = require('./user.js');
var User = userFile.User;

http://nodejs.org/docs/v0.4.10/api/globals.html#require

আর একটি উপায় হ'ল:

global.User = User;

তাহলে এটি যথেষ্ট হবে server.js:

require('./user.js');

1

আমি কেবল এটিই উল্লেখ করতে চাই যে এখানে বেশিরভাগ উত্তর কাজ করে না, আমি যদি নডিজেএস এবং আইডিকে নতুন হয়ে থাকি তবে যদি পুরো সময় জুড়ে "মডিউল.এক্সপোর্টস.ইউরক্লাস" পদ্ধতিটি পরিবর্তিত হয়, বা লোকেরা যদি ভুল উত্তর প্রবেশ করে তবে।

// MyClass

module.exports.Ninja = class Ninja{
    test(){
        console.log('TESTING 1... 2... 3...');
    };
}
//Using MyClass in seprate File


const ninjaFw = require('./NinjaFw');

let ninja = new ninjaFw.Ninja();
ninja.test();

  • আমি বর্তমানে এই পদ্ধতিটি ব্যবহার করছি। আমি এই সিনট্যাক্সটি পছন্দ করি, বেকুয়েজ মডিউল। অন্য উপায় আপনি এটি করতে পারেন:
//  Ninja Framework File


class Ninja{
    test(){
        console.log('TESTING 1... 2... 3...');
    };
}


module.exports.Ninja = Ninja;

  • দুটি পৃথক বাক্য গঠন কিন্তু, শেষ পর্যন্ত একই ফলাফল। সিনট্যাক্স অ্যানাস্থেসিকের মাত্র একটি বিষয়।

0

MyFile.js এর পরিবর্তে আপনার ফাইলগুলি myFile.mjs এর মতো লিখুন। এই এক্সটেনশানটি এস 6 এর সমস্ত গুডির সাথে আসে তবে আমার অর্থ আমি আপনাকে ওয়েবপ্যাক এবং ব্যাবেলকে সুপারিশ করি

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