কীভাবে একটি এক্সপ্রেস.জেএস অ্যাপ্লিকেশন গঠন করবেন?


102

এক্সপ্রেস.জেএস অ্যাপ্লিকেশনটিতে app.jsফাইলটি ভেঙে ফেলা এবং মডুলারাইজ করার জন্য কি সাধারণ কনভেনশন রয়েছে ? নাকি সব কিছুই একক ফাইলে রাখা সাধারণ?


3
লোকেরা সেগুলি রাস্তায় ভেঙে দিয়েছে। এছাড়াও আপনি এক্সপ্রেস-সংস্থানগুলি একবার দেখে নিতে পারেন।
ব্রাম্পারসাদ

@ ব্র্যান্ডন_আর আপনি কি সংস্থান চেষ্টা করেছেন? আমি এটার দিকে তাকালাম এবং ভেবেছিলাম এটি ঝরঝরে লাগছে, টায়ারগুলি এখনও লাথি মারেনি।
সম্ভাব্য

1
একটু দেরি, কিন্তু আমি সম্প্রতি খোলা আপনি চমত্কারভাবে app.js ভেঙ্গে করার অনুমতি দেয় দ্রুতগামী একটি রাউটার sourced ইন্ট্রো কন্ট্রোলার + + মতামত ইত্যাদি দেখুন: github.com/kishorenc/road
jeffreyveon

উত্তর:


82

আমার নিম্নরূপটি ভেঙে গেছে:

~/app
|~controllers
| |-monkey.js
| |-zoo.js
|~models
| |-monkey.js
| |-zoo.js
|~views
| |~zoos
|   |-new.jade
|   |-_form.jade
|~test
|  |~controllers
|    |-zoo.js
|  |~models
|    |-zoo.js
|-index.js

যা প্রাসঙ্গিক তা ফিরিয়ে দিতে আমি রফতানি ব্যবহার করি। উদাহরণস্বরূপ, আমি যে মডেলগুলি করি তা:

module.exports = mongoose.model('PhoneNumber', PhoneNumberSchema);

এবং তারপরে যদি আমার কোনও ফোন নম্বর তৈরি করতে হয় তবে এটি এতটা সহজ:

var PhoneNumber = require('../models/phoneNumber');
var phoneNumber = new PhoneNumber();

যদি আমাকে স্কিমা ব্যবহার করতে হয় তবে PhoneNumber.schema

(যা ধরে নিয়েছে যে আমরা রুট ফোল্ডার থেকে কাজ করছি এবং 1 স্তরের উপরে যেতে হবে এবং তারপরে মডেলগুলিতে নামতে হবে)


সম্পাদনা 4

দ্রুতগামী উইকি এটি উপরে নির্মিত অবকাঠামো একটি তালিকা আছে।

এর মধ্যে আমি মনে করি টুইটারের ম্যাটাডোরগুলি বেশ ভালভাবে কাঠামোযুক্ত। তারা কীভাবে অ্যাপটির অংশগুলি লোড করে দেয় সে সম্পর্কে আমরা আসলে একটি খুব অনুরূপ পন্থা ব্যবহার করেছি।

derby.js এছাড়াও অত্যন্ত আকর্ষণীয় দেখায়। এটি হাইপগুলি ছাড়াই উল্কাপথের সমান এবং প্রকৃতপক্ষে creditণ প্রদানের ক্ষেত্রে ক্রেডিট দেয় (উল্লেখযোগ্যভাবে নোড এবং এক্সপ্রেস)।


সম্পাদনা 3

আপনি যদি কফিস্ক্রিপ্টের অনুরাগী হন (আমি নই) এবং রিয়াআআআআআআআআআআালি হ'ল রেলের এলএন্ডএফ চান, সেখানে টাওয়ার.জেও রয়েছে


সম্পাদনা 2

আপনি যদি রেলের সাথে পরিচিত হন এবং কিছু ধারণার ব্লিড-ওভারকে কিছু মনে না করেন সেখানে লোকোমোটিভ রয়েছে । এটি এক্সপ্রেসে নির্মিত হালকা ওজনের ফ্রেমওয়ার্ক। এটি আরআর এর মতো একটি অনুরূপ কাঠামোযুক্ত এবং আরও কিছু প্রাথমিক ধারণা (যেমন রাউটিং) এর উপর বহন করে।

আপনি এটি ব্যবহার করার পরিকল্পনা না করলেও এটি পরীক্ষা করে দেখার মতো।


সম্পাদনা 1

নোডেজ-এক্সপ্রেস-মঙ্গুজ-ডেমো আমার কীভাবে কাঠামোবদ্ধ হয়েছে তার সাথে খুব মিল। এটা দেখ.


2
ব্যবসায়ের যুক্তি কোথায় যায়? প্রমাণীকরণের মতো জিনিসের জন্য আপনি কি কখনও সহায়ক ব্যবহার করেন?
এরিক দি রেড

@ ইরিকের রেড আপনি যদি এমভিসি প্যাটার্ন (রেল, অ্যাস্প। নেট এমভিসি, ইত্যাদি) এর সাথে পরিচিত হন তবে আমি আমার রুটগুলিকে আমার নিয়ন্ত্রক হিসাবে বিবেচনা করি এবং এর পরে সমস্ত ধরণের ফলস স্থানে পড়ে। ব্যবসায়ের যুক্তি মডেলগুলিতে যায় (যদিও বৈধতা এবং মঙ্গুজ নিয়ে আমার সমস্যা হচ্ছে)। সাহায্যকারীদের জন্য, আমি পুনরায় ব্যবহার করি এমন জিনিসগুলির জন্য আমি নিজের জন্য একসাথে রাখছি একটি সাধারণ অভ্যন্তরীণ ব্যবহারের লাইব্রেরিতে রফতানি ব্যবহার করি।
সম্ভাব্য

আমাদের দেখার জন্য গিথুবে একটি নমুনা সেটআপ আপলোড করা ভাল। রুটস ফোল্ডারে / ফাইলগুলিতে কী যায়?
chovy

1
@ ছোভি আমি গিথুব.এইচডি 42/nodejs-express-mongoose-demo এ একটি লিঙ্ক যুক্ত করেছি যার খুব একই কাঠামো রয়েছে
চান্স

আমি এক্সপ্রেসের শীর্ষে কোনও ফোলা ফ্রেমওয়ার্কগুলি এড়ানোর পরামর্শ দিচ্ছি
রায়নস

9

সতর্কতা: রেফারেন্সিং কোড আমি নোড নকআউটের জন্য একসাথে হ্যাক করেছি, এটি একধরণের কাজ তবে মার্জিত বা পালিশ থেকে অনেক দূরে।

বিভাজন সম্পর্কে আরও সুনির্দিষ্ট হওয়ার জন্য app.jsআমার কাছে নিম্নলিখিত অ্যাপ্লিকেশন.জেএস ফাইল রয়েছে file

var express = require('express'),
    bootstrap = require('./init/bootstrap.js'),
    app = module.exports = express.createServer();

bootstrap(app);

এর মূলত অর্থ আমি আমার সমস্ত বুটস্ট্র্যাপিংকে একটি পৃথক ফাইলে রাখি, তারপরে আমি সার্ভারটি বুটস্ট্র্যাপ করি।

তাহলে বুটস্ট্র্যাপ কী করে ?

var configure = require("./app-configure.js"),
    less = require("./watch-less.js"),
    everyauth = require("./config-everyauth.js"),
    routes = require("./start-routes.js"),
    tools = require("buffertools"),
    nko = require("nko"),
    sessionStore = new (require("express").session.MemoryStore)()

module.exports = function(app) {
    everyauth(app);
    configure(app, sessionStore);
    less();
    routes(app, sessionStore);
    nko('/9Ehs3Dwu0bSByCS');


    app.listen(process.env.PORT);
    console.log("server listening on port xxxx");
};

ভাল এটি সুন্দর খণ্ডগুলিতে সমস্ত সার্ভার ইনিশিয়েশন সেটআপ বিভক্ত করে। বিশেষভাবে

  • আমার কাছে একটি অংশ রয়েছে যা আমার সমস্ত রিমোট OAuth প্রমাণীকরণটি অ্যারিওথ ব্যবহার করে সেট করে।
  • আমার একটি অংশ রয়েছে যা আমার অ্যাপ্লিকেশনটি কনফিগার করে (মূলত কল করা app.configure)
  • আমার কোডের একটি সামান্য বিট রয়েছে যা কম ঘুষি দেয় তাই এটি রানের সময় আমার কমটিকে যে কোনও একটিকে পুনরায় সংকলন করে।
  • আমার কোড রয়েছে যা আমার সমস্ত রুট সেট আপ করে
  • আমি এই ছোট এনকিও মডিউল কল
  • অবশেষে আমি একটি বন্দরের কথা শুনে সার্ভারটি শুরু করি।

যেমন উদাহরণস্বরূপ রাউটিং ফাইলটি দেখুন

var fs = require("fs"),
    parseCookie = require('connect').utils.parseCookie;

module.exports = function(app, sessionStore) {
    var modelUrl = __dirname + "/../model/",
        models = fs.readdirSync(modelUrl),
        routeUrl = __dirname + "/../route/"
        routes = fs.readdirSync(routeUrl);

এখানে আমি আমার সমস্ত মডেল এবং রুটগুলিকে ফাইলের অ্যারে হিসাবে লোড করি।

দাবি অস্বীকার: আপনি HTTP সার্ভার শুরু করার আগে (আগে ) কল করা readdirSyncঠিক তখনই ঠিক । সার্ভার শুরুর সময় সিঙ্ক্রোনিয়াস ব্লকিং কলগুলি কলটি কোডটিকে আরও পঠনযোগ্য করে তোলে (এটি মূলত একটি হ্যাক).listen

    var io = require("socket.io").listen(app);

    io.set("authorization", function(data, accept) {
        if (data.headers.cookie) {
            data.cookie = parseCookie(data.headers.cookie);

            data.sessionId = data.cookie['express.sid'];

            sessionStore.get(data.sessionId, function(err, session) {

                if (err) {
                    return accept(err.message, false);
                } else if (!(session && session.auth)) {
                    return accept("not authorized", false)
                }
                data.session = session;
                accept(null, true);
            });
        } else {
            return accept('No cookie', false);
        }
    });

এখানে আমি सॉকেট.আইওকে সত্যিকার অর্থে অনুমোদনের জন্য ঘুষি দিচ্ছি তারপরে কোনও টম এবং জ্যাককে আমার সকেট.ইও সার্ভারের সাথে কথা বলার জন্য

    routes.forEach(function(file) {
        var route = require(routeUrl + file),
            model = require(modelUrl + file);

        route(app, model, io);
    });
};

এখানে আমি রুট ফাইল থেকে প্রত্যাবর্তিত প্রতিটি রুট অবজেক্টে প্রাসঙ্গিক মডেলটি পাস করে আমার রুটগুলি শুরু করি।

মূলত টুকরোটি হ'ল আপনি সবকিছু সামান্য সামান্য মডিউলগুলিতে व्यवस्थित করেন এবং তারপরে কিছু বুটস্ট্র্যাপিং প্রক্রিয়া থাকে।

আমার অন্যান্য প্রকল্পে (আমার ব্লগ) একই ধরণের কাঠামোযুক্ত একটি init ফাইল রয়েছে

দাবি অস্বীকার: ব্লগটি ভেঙে গেছে এবং তৈরি হচ্ছে না, আমি এটি নিয়ে কাজ করছি।



0

এক্সপ্রেস-জেনারেটরের সরঞ্জামটির উপরে আমার অ্যাপ্লিকেশনগুলি তৈরি করা আছে। আপনি এটি চালিয়ে ইনস্টল করতে পারেন npm install express-generator -gএবং এটি ব্যবহার করে চালাতে পারেন express <APP_NAME>

আপনাকে একটি দৃষ্টিকোণ দেওয়ার জন্য, আমার ছোট অ্যাপ্লিকেশনটির কাঠামোর একটি দেখতে এই রকম হয়েছে:

~/
|~bin
| |-www
|
|~config
| |-config.json
|
|~database
| |-database.js
|
|~middlewares
| |-authentication.js
| |-logger.js
|
|~models
| |-Bank.js
| |-User.js
|
|~routes
| |-index.js
| |-banks.js
| |-users.js
|
|~utilities
| |-fiat-converersion.js
|
|-app.js
|-package.json
|-package-lock.json

এই কাঠামোটি সম্পর্কে আমি পছন্দ করি একটি দুর্দান্ত জিনিস আমি যে কোনও এক্সপ্রেস অ্যাপ্লিকেশনটি বিকাশ করি তার জন্য গ্রহণগুলি শেষ করে সেগুলি হল রুটগুলি যেভাবে সাজানো হয়। app.use()বিশেষত ফাইলটি বড় হওয়ার সাথে সাথে আমি প্রতিটি রুটের ফাইলগুলি অ্যাপ.জেএস এবং প্রতিটি রুটে প্রবেশ করা পছন্দ করি না । এর মতো, আমি আমার সমস্ত app.use()একটি ./routes/index.js ফাইলে গ্রুপবদ্ধ এবং কেন্দ্রীভূত করতে সহায়ক বলে মনে করেছি ।

শেষ পর্যন্ত, আমার অ্যাপ্লিকেশন.জেএস দেখতে এমন কিছু দেখাচ্ছে:

...
const express = require('express');
const app = express();

...
require('./routes/index')(app);

এবং আমার ./routes/index.js দেখতে এরকম কিছু দেখাবে:

module.exports = (app) => {
  app.use('/users', require('./users'));
  app.use('/banks', require('./banks'));
};

আমি কেবলমাত্র সক্ষম হয়েছি require(./users)কারণ আমি ব্যবহারকারীদের রুটটি এক্সপ্রেস ব্যবহার করে লিখেছি ou

এটি আমার ./routers/users.js রুটে আপনি কী জরিমানা করবেন তার একটি উদাহরণ:


const router = require('express').Router();

router.post('/signup', async (req, res) => {
    // Signup code here
});

module.exports = router;

আশা করি এটি আপনার প্রশ্নের জবাব দিতে সহায়তা করেছে! ভাগ্য সুপ্রসন্ন হোক!

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