2012-03-28 17 views
5

मैं इस विषय के अनुसार Node.jsकनेक्ट और एक्सप्रेस utils

की दुनिया में नया हूँ: What is Node.js' Connect, Express and “middleware”?
मुझे पता चला कि ConnectExpress

का हिस्सा था मैं कोड में एक छोटे से खोदा,

./myProject/node_modules/express/lib/utils.js 

और बेहतर:

और मैं दो बहुत ही दिलचस्प फ़ाइलें मिली

ये दो फ़ाइलें उपयोगी कार्यों से भरे हुए हैं और मैं सोच रहा था कि उन्हें सही तरीके से कैसे बुलाया जाए।

var express = require('express') 
    , resource = require('express-resource') 
    , mongoose = require('mongoose') 
    , expresstUtils = 
     require('./node_modules/express/lib/utils.js'); 
    , connectUtils = 
     require('./node_modules/express/node_modules/connect/lib/utils.js'); 

लेकिन मैं इसे एक छोटे से अनाड़ी, और क्या मेरी दूसरों फ़ाइलों के बारे में पाया:

जहाँ तक, ./myProject/app.js में, कि मैं क्या कर रहा है?

जैसे, यहाँ मेरी मार्गों में से एक है:

myResources = app.resource(
       'myresources', 
       require('./routes/myresources.js')); 

और यहाँ myresources.js की सामग्री है:

exports.index = function(req, res) 
{ 
    res.render('./myresources.jade', { title: 'My Resources' }); 
}; 

exports.show = function(req, res) 
{ 
    fonction resourceIsWellFormatted(param) 
    { 
    // Here is some code to determine whether the resource requested 
    // match with the required format or not 
    // return true if the format is ok 
    // return false if not 
    } 

    if (resourceIsWellFormatted(req.params['myresources'])) 
    { 
    // render the resource 
    } 
    else 
    { 
    res.send(400); // HEY! what about the nice Connect.badRequest in its utils.js? 
    } 
}; 

आप res.send(400) के बाद टिप्पणी में देख सकते हैं, मैं अपने आप को अगर पूछना badRequest फ़ंक्शन का उपयोग करना संभव है जो कनेक्ट मॉड्यूल की utils.js फ़ाइल में है।

एक ही फ़ाइल में अच्छा md5 फ़ंक्शन के बारे में क्या?

मैं जगह को यह hugly मेरी myresources.js के शुरू में फोन उन्हें ?:

var connectUtils = 
     require('../node_modules/express/node_modules/connect/lib/utils.js'); 

उपयोग करने के लिए या, वहाँ एक और अधिक सुरुचिपूर्ण समाधान (यहां तक ​​कि app.js के लिए) है?

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

2

केवल और अधिक सुरुचिपूर्ण रास्ता मैं के साथ (यह मानते हुए एक्सप्रेस अपने जड़ अंदर "node_modules" फ़ोल्डर है) है आया:

require("express/node_modules/connect/lib/utils"); 

नोड स्थापना खिड़कियों पर है, नोड 0.8.2 संस्करण


और अतिरिक्त जानकारी का एक सा:

इस तरह से तुम्हें पता है जहाँ आप पथ में हैं और संबंधित पथ (./ या ../), इस पर किया जा सकता का उपयोग करने के लिए मजबूर हो की जरूरत नहीं है कोई भी फाइल घोंसला स्तर।

मैं डाल रूट "node_modules" फ़ोल्डर के अंदर अपने सभी कस्टम मॉड्यूल (मैं अपने फ़ोल्डर "custom_modules" नाम) और उन्हें घोंसले के किसी भी स्तर पर इस तरह से कहते हैं:

require("custom_modules/mymodule/something") 
+2

आप इस तकनीक को भविष्य के सबूत होने की उम्मीद नहीं कर सकते हैं। 'एक्सप्रेस @ 4.0.0' पूरी तरह से बदल सकता है कि यह आंतरिक रूप से कैसे कार्य करता है और आप जो भी जानते हैं, उसके लिए' कनेक्ट 'ड्रॉप हो सकता है (संभावना नहीं है, लेकिन आपको बिंदु मिल सकता है)। और फिर, यदि आप अपनी परियोजना की निर्भरताओं में 'कनेक्ट' ('एक्सप्रेस' द्वारा उपयोग किया जाने वाला वही संस्करण) शामिल करना चाहते थे, तो यह तकनीक काम नहीं करेगी। –

+0

@ गुथमबध्रिनाथन मैं जल्द ही किसी भी समय कनेक्ट ड्रॉप छोड़ने की पूर्ववत नहीं करता :) हालांकि, कनेक्ट आसानी से उनकी फ़ाइलों का स्थान बदल सकता है या उनमें क्या है - जो आईएमएचओ एक बड़ा खतरा है। इस तकनीक को तब भी काम करना चाहिए जब आप अपनी परियोजना की निर्भरताओं में कनेक्ट शामिल करते हैं, पथ अभी भी व्यक्त करने के लिए इंगित करता है, इसलिए node.js पहले व्यक्त करने के लिए जाएंगे। node.js प्रलेखन (फ़ाइल मॉड्यूल) सेक्शन: * बिना किसी अग्रणी '/' या '।/ 'फ़ाइल को इंगित करने के लिए, मॉड्यूल या तो "कोर मॉड्यूल" है या एक node_modules फ़ोल्डर से लोड किया गया है। * http://nodejs.org/api/all.html#all_file_modules – Leonidaz

+0

हां, यह' एक्सप्रेस 'पर जाएगा 'जो या तो "कोर मॉड्यूल" है या "node_modules" में है। लेकिन यदि 'कनेक्ट' को प्रोजेक्ट निर्भरता के रूप में जोड़ा गया है, तो आपको 'express/node_modules' निर्देशिका * के भीतर' कनेक्ट' * नामक एक निर्देशिका नहीं मिलेगी। –

2

यदि आप सीधे connect तक पहुंचना चाहते हैं, तो मेरा सुझाव है कि आप के साथ अपने प्रोजेक्ट की निर्भरता के रूप में connect इंस्टॉल करें। फिर आप var utils = require('connect').utils कर सकते हैं।

+0

दो बार एक पूरे ढांचे को स्थापित करें, बस छोटे 'आवश्यकता' के साथ कुछ उपयोगिता कार्यों तक पहुंचने के लिए अधिक सुरुचिपूर्ण प्रतीत नहीं होता है ... –

+2

जब आप एक बड़े पैमाने पर प्रोजेक्ट बनाते हैं, तो आप पाएंगे कि आपके पास मॉड्यूल के बीच बहुत अधिक डुप्लिकेशन है। उदाहरण के लिए, मेरे पास कई 'mkdirp', 'async',' eco' आदि हैं। यह एक बड़ा सौदा नहीं है। –

+0

एक [DRY] का सम्मान करने के लिए (http://en.wikipedia.org/wiki/Don't_repeat_yourself) "डिज़ाइन पैटर्न" मेरे लिए एक बड़ा सौदा है। इस बिंदु पर, मैं अपने स्वयं के यूटिल मॉड्यूल में आवश्यक कार्यों को कॉपी/अतीत पसंद करता हूं। लेकिन यह कोई बहुत शुष्क नहीं है, न ही सुरुचिपूर्ण ... –

संबंधित मुद्दे