खोज…


टिप्पणियों

दृश्य निर्देशिका के साथ आभासी निर्देशिका / नेस्टेड अनुप्रयोग

यदि आप किसी दृश्य इंजन का उपयोग करके दृश्य प्रस्तुत करने के लिए एक्सप्रेस का उपयोग करने जा रहे हैं, तो आपको अपने विचारों में virtualDirPath मान को पास करना होगा

`res.render('index', { virtualDirPath: virtualDirPath });`

ऐसा करने का कारण यह है कि आपके एप्लिकेशन और स्थिर संसाधन पथों द्वारा होस्ट किए गए अन्य दृश्यों के लिए आपके हाइपरलिंक को यह जानने के लिए कि तैनाती के बाद सभी विचारों को संशोधित करने की आवश्यकता के बिना साइट को कहाँ होस्ट किया जा रहा है। यह IISNode के साथ वर्चुअल निर्देशिकाएँ का उपयोग करने के अधिक कष्टप्रद और थकाऊ नुकसान में से एक है।

संस्करण

उपरोक्त सभी उदाहरणों के साथ काम करते हैं

  • एक्सप्रेस v4.x
  • IIS 7.x / 8.x
  • सॉकेट.आईओ v1.3.x या अधिक

शुरू करना

IISNode एक .NET अनुप्रयोग की तरह ही IIS 7/8 पर होस्ट किए जाने वाले Node.js वेब ऐप्स को अनुमति देता है। बेशक, आप Windows पर अपने node.exe प्रक्रिया को स्वयं होस्ट कर सकते हैं लेकिन ऐसा क्यों करें जब आप बस अपना ऐप IIS में चला सकते हैं।

IISNode कई कोर, की प्रक्रिया manageement से अधिक स्केलिंग संभाल लेंगे node.exe , और स्वत: रीसायकल अपने आईआईएस आवेदन जब भी अपने app अद्यतन किया जाता है, बस इसके के कुछ नाम हैं लाभ

आवश्यकताएँ

IIS में अपने Node.js ऐप को होस्ट करने से पहले IISNode की कुछ आवश्यकताएं होती हैं।

  1. Node.js को IIS होस्ट पर स्थापित किया जाना चाहिए, 32-बिट या 64-बिट, या तो समर्थित हैं।
  2. IISNode ने x86 या x64 स्थापित किया है, यह आपके IIS होस्ट की बिटनेस से मेल खाना चाहिए।
  3. IIS के लिए Microsoft URL-Rewrite मॉड्यूल आपके IIS होस्ट पर स्थापित है।
    • यह कुंजी है, अन्यथा आपके Node.js एप्लिकेशन से अनुरोध अपेक्षा के अनुरूप काम नहीं करेगा।
  4. आपके Node.js ऐप के रूट फ़ोल्डर में एक Web.config
  5. आपके Web.config भीतर एक iisnode.yml फ़ाइल या एक <iisnode> तत्व के माध्यम से IISNode कॉन्फ़िगरेशन।

एक्सप्रेस का उपयोग करके बेसिक हैलो वर्ल्ड उदाहरण

इस उदाहरण को काम करने के लिए, आपको अपने IIS होस्ट पर IIS 7/8 ऐप बनाना होगा और निर्देशिका को जोड़ना होगा जिसमें भौतिक निर्देशिका के रूप में Node.js वेब ऐप शामिल हो। सुनिश्चित करें कि आपका एप्लिकेशन / एप्लिकेशन पूल पहचान Node.js इंस्टॉल को एक्सेस कर सकता है। यह उदाहरण Node.js 64-बिट इंस्टॉलेशन का उपयोग करता है।

परियोजना की मजबूती

यह एक IISNode / Node.js वेब ऐप की मूल परियोजना संरचना है। यह Web.config को छोड़कर किसी भी गैर-IISNode वेब ऐप के समान है।

- /app_root
  - package.json
  - server.js
  - Web.config

server.js - एक्सप्रेस आवेदन

const express = require('express');
const server = express();

// We need to get the port that IISNode passes into us 
// using the PORT environment variable, if it isn't set use a default value
const port = process.env.PORT || 3000;

// Setup a route at the index of our app    
server.get('/', (req, res) => {
    return res.status(200).send('Hello World');
});

server.listen(port, () => {
    console.log(`Listening on ${port}`);
});

कॉन्फ़िगरेशन और Web.config

Web.config किसी अन्य IIS Web.config तरह ही है, इसके अलावा निम्नलिखित दो चीजें मौजूद होनी चाहिए, URL <rewrite><rules> और IISNode <handler> । ये दोनों तत्व <system.webServer> तत्व के बच्चे हैं।

विन्यास

आप IISNode को iisnode.yml फ़ाइल का उपयोग करके या अपने Web.config में <system.webServer> बच्चे के रूप में <iisnode> तत्व जोड़कर कॉन्फ़िगर कर सकते हैं। इन दोनों कॉन्फ़िगरेशन को एक दूसरे के साथ संयोजन में उपयोग किया जा सकता है, हालांकि, इस मामले में, Web.config को iisnode.yml फ़ाइल निर्दिष्ट करने की आवश्यकता होगी और इसके बजाय किसी भी कॉन्फ़िगरेशन विरोध को iisnode.yml फ़ाइल से लिया जाएगा । यह कॉन्फ़िगरेशन ओवरराइडिंग के आसपास अन्य तरीके से नहीं हो सकता है।

IISNode हैंडलर

IIS के लिए यह जानने के लिए कि server.js में हमारा Node.js वेब ऐप शामिल है, हमें इसे स्पष्ट रूप से बताने की आवश्यकता है। हम इसे IIS हैंडोड <handlers> तत्व में IISNode <handler> को जोड़कर कर सकते हैं।

<handlers>
  <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
</handlers>

URL- पुनर्लेखन नियम

कॉन्फ़िगरेशन का अंतिम भाग यह सुनिश्चित कर रहा है कि हमारे IIS उदाहरण में आने वाले हमारे Node.js ऐप के लिए ट्रैफ़िक का उद्देश्य IISNode को निर्देशित किया जा रहा है। URL रीराइट नियम के बिना, हम पर जाकर हमारे एप्लिकेशन की यात्रा करने की आवश्यकता होगी http://<host>/server.js जब एक संसाधन द्वारा आपूर्ति का अनुरोध करने की कोशिश कर रहा है, और भी बदतर server.js आप एक मिल जाएगा 404 । यही कारण है कि IIS पुनर्लेखन के लिए URL पुनर्लेखन आवश्यक है।

<rewrite>
    <rules>
        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent" patternSyntax="Wildcard">
            <action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true"/>
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            </conditions>
            <match url="*.*"/>
        </rule>

        <!-- All other URLs are mapped to the Node.js application entry point -->
        <rule name="DynamicContent">
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
            </conditions>
            <action type="Rewrite" url="server.js"/>
        </rule>
    </rules>
</rewrite>

यह इस उदाहरण के लिए एक कार्यशील Web.config फ़ाइल है , जो 64-बिट Node.js स्थापित करने के लिए सेटअप है।


बस, अब अपनी IIS साइट पर जाएं और अपने Node.js एप्लिकेशन को काम करते हुए देखें।

IIS वर्चुअल डायरेक्टरी या नेस्टेड एप्लिकेशन का उपयोग करके

IIS में एक वर्चुअल निर्देशिका या नेस्टेड एप्लिकेशन का उपयोग करना एक सामान्य परिदृश्य है और सबसे अधिक संभावना है कि आप IISNode का उपयोग करते समय लाभ लेना चाहते हैं।

IISNode कॉन्फ़िगरेशन के माध्यम से वर्चुअल निर्देशिकाएँ या नेस्टेड एप्लिकेशन के लिए प्रत्यक्ष समर्थन प्रदान नहीं करता है ताकि इसे प्राप्त करने के लिए हमें IISNode की एक सुविधा का लाभ उठाना होगा जो कॉन्फ़िगरेशन का हिस्सा नहीं है और बहुत कम ज्ञात है। Web.config साथ <appSettings> तत्व के सभी बच्चों को app.etting कुंजी का उपयोग करके गुण के रूप में process.env ऑब्जेक्ट में जोड़ा जाता है।

हमारे <appSettings> में एक वर्चुअल डायरेक्टरी बनाते हैं

<appSettings>
  <add key="virtualDirPath" value="/foo" />
</appSettings>

हमारे Node.js ऐप के भीतर हम virtualDirPath सेटिंग तक पहुँच सकते हैं

console.log(process.env.virtualDirPath); // prints /foo

अब जब हम कॉन्फ़िगरेशन के लिए <appSettings> तत्व का उपयोग कर सकते हैं, तो हम इसका लाभ उठा सकते हैं और अपने सर्वर कोड में इसका उपयोग कर सकते हैं।

// Access the virtualDirPath appSettings and give it a default value of '/'
// in the event that it doesn't exist or isn't set
var virtualDirPath = process.env.virtualDirPath || '/';

// We also want to make sure that our virtualDirPath 
// always starts with a forward slash
if (!virtualDirPath.startsWith('/', 0))
  virtualDirPath = '/' + virtualDirPath;

// Setup a route at the index of our app    
server.get(virtualDirPath, (req, res) => {
    return res.status(200).send('Hello World');
});

हम virtualDirPath का उपयोग अपने स्थैतिक संसाधनों के साथ भी कर सकते हैं

// Public Directory
server.use(express.static(path.join(virtualDirPath, 'public')));
// Bower
server.use('/bower_components', express.static(path.join(virtualDirPath, 'bower_components')));

चलो सब एक साथ डाल दिया

const express = require('express');
const server = express();

const port = process.env.PORT || 3000;

// Access the virtualDirPath appSettings and give it a default value of '/'
// in the event that it doesn't exist or isn't set
var virtualDirPath = process.env.virtualDirPath || '/';

// We also want to make sure that our virtualDirPath 
// always starts with a forward slash
if (!virtualDirPath.startsWith('/', 0))
  virtualDirPath = '/' + virtualDirPath;

// Public Directory
server.use(express.static(path.join(virtualDirPath, 'public')));
// Bower
server.use('/bower_components', express.static(path.join(virtualDirPath, 'bower_components')));

// Setup a route at the index of our app    
server.get(virtualDirPath, (req, res) => {
    return res.status(200).send('Hello World');
});

server.listen(port, () => {
    console.log(`Listening on ${port}`);
});

IISNode के साथ Socket.io का उपयोग करना

IISNode के साथ काम कर रहे सॉकेट.आईओ को प्राप्त करने के लिए, केवल एक वर्चुअल निर्देशिका / नेस्टेड एप्लिकेशन का उपयोग नहीं करने पर आवश्यक परिवर्तन Web.config भीतर होते हैं।

Socket.io अनुरोध भेजता है के साथ शुरू के बाद से /socket.io , IISNode कि ये भी IISNode संभाला जाना चाहिए और सिर्फ स्थिर फ़ाइल अनुरोधों या अन्य यातायात नहीं हैं आईआईएस करने के लिए संवाद करने की जरूरत है। इसके लिए मानक IISNode ऐप्स की तुलना में भिन्न <handler> आवश्यकता होती है।

<handlers>
    <add name="iisnode-socketio" path="server.js" verb="*" modules="iisnode" />
</handlers>

<handlers> के परिवर्तनों के अलावा, हमें एक अतिरिक्त URL रीराइट नियम भी जोड़ना होगा। फिर से लिखना नियम सभी /socket.io ट्रैफ़िक को हमारी सर्वर फ़ाइल पर भेजता है जहाँ Socket.io सर्वर चल रहा है।

<rule name="SocketIO" patternSyntax="ECMAScript">
    <match url="socket.io.+"/>
    <action type="Rewrite" url="server.js"/>
</rule>

आप आईआईएस 8 का उपयोग कर रहे हैं, तो आप अपने WebSockets अपने में सेटिंग को अक्षम करने की आवश्यकता होगी Web.config ऊपर हैंडलर जोड़ने के अलावा और नियमों को फिर से लिखने। IIS 7 में यह अनावश्यक है क्योंकि वेबसकेट सपोर्ट नहीं है।

<webSocket enabled="false" />



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow