2013-06-23 6 views
5

मैं नोडजेएस और एक्सप्रेस सीखने की कोशिश कर रहा हूं। मैं स्थानीय भंडारण तक पहुंचने के लिए नोड-लोकल स्टोरेज पैकेज का उपयोग कर रहा हूं। यह काम करता है जब इसरजिस्टर हेल्पर फ़ंक्शन नोड.जेएस + एक्सप्रेस

मार्गों की तरह सीधे कोड का उपयोग कर समारोह में/social.js

exports.index = function(req, res) 
{ 
    if (typeof localStorage === "undefined" || localStorage === null) 
    { 
     var LocalStorage = require('node-localstorage').LocalStorage; 
     localStorage = new LocalStorage('./scratch'); 
    } 

localStorage.setItem('myFirstKey', 'myFirstValue'); 
console.log(localStorage.getItem('myFirstKey')); 
res.render('social/index', {title: "Start"}); 
} 

लेकिन मैं सभी मेरे दूसरे में फिर से अधिक से अधिक इस कोड को लिखने के लिए नहीं करना चाहते हैं स्थानीय स्टोरेज तक पहुंचने पर कार्य करता है। मैं एक सहायक फ़ंक्शन पंजीकृत करने में सक्षम होना चाहता हूं जिसे मैं

var localStorage = helpers.getLocalStorage 

या ऐसा कुछ एक्सेस कर सकता हूं।

मैं इसे नोडजेएस में कैसे कर सकता हूं? मैंने ऐप.लोकल्स के बारे में कुछ देखा है? लेकिन मैं अपने मार्गों में ऐप ऑब्जेक्ट का उपयोग कैसे कर सकता हूं?

उत्तर

13

ऐसा करने के कई तरीके हैं, इस पर निर्भर करते हुए कि आप अपने सहायक तरीकों का उपयोग करने की योजना बना रहे हैं। मैं व्यक्तिगत रूप से अपने स्वयं के node_modules फ़ोल्डर को सेट करना पसंद करता हूं, जिसे utils कहा जाता है, जिसमें सभी सहायक और उपयोगिता विधियों की आवश्यकता होती है।

उदाहरण के लिए, निम्नलिखित परियोजना संरचना संभालने:

 
app.js 
db.js 
package.json 
views/ 
    index.ejs 
    ... 
routes/ 
    index.js 
    ... 
node_modules/ 
    express/ 
    ... 

सीधे शब्दों से युक्त एक index.js फ़ाइल के साथ, एक utils फ़ोल्डर जोड़ने node_modules के तहत:

function getLocalStorage(firstValue){ 
    if (typeof localStorage === "undefined" || localStorage === null) 
    { 
     var LocalStorage = require('node-localstorage').LocalStorage; 
     localStorage = new LocalStorage('./scratch'); 
    } 
    localStorage.setItem('myFirstKey', 'myFirstValue'); 
    return localStorage; 
} 
exports.getLocalStorage = getLocalStorage; 

फिर, किसी भी समय आप इस समारोह की जरूरत है, बस require मॉड्यूल utils:

var helpers = require('utils'); 
exports.index = function(req, res){ 
    localStorage = helpers.getLocalStorage('firstValue'); 
    res.render('social/index', {title: "Start"}); 
} 

संपादित टिप्पणी में शॉन द्वारा बताया गया है, इस दृष्टिकोण जब तक आप एक नाम Node's core modules से अलग के साथ अपने node_modules फ़ोल्डर को नाम के रूप में काम करता है। ऐसा इसलिए है क्योंकि:

कोर मॉड्यूल हमेशा वरीयता से लोड होते हैं यदि उनके पहचानकर्ता की आवश्यकता होती है()। उदाहरण के लिए, आवश्यक है ('http') हमेशा HTTP मॉड्यूल में निर्मित वापस लौटाएगा, भले ही उस नाम से कोई फ़ाइल हो।

+0

हां। मैं कुछ simillar किया: 'exports.getLocalStorage = function() { अगर (typeof localStorage ===" अनिर्धारित "|| localStorage === नल) \t { वर LocalStorage = की आवश्यकता होती है ('नोड LocalStorage') ।स्थानीय भंडार; लोकल स्टोरेज = नया लोकल स्टोरेज ('./ स्क्रैच'); } स्थानीय स्टोरेज लौटाएं; }; ' क्या आप अपना" सर्वश्रेष्ठ अभ्यास "मानेंगे? मैं नोड/एक्सप्रेस सीखने की कोशिश कर रहा हूं और यदि आप जानते हैं कि मेरा क्या मतलब है तो मैं इसे "सही तरीका" करना चाहता हूं। – JOSEFtw

+1

अच्छा, यह वास्तव में उस पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। मुझे पता है कि "सामान्य ज्ञान" सामान्य कार्यक्षमता के लिए lib/फ़ोल्डर का उपयोग करना है जब आपके पास एकाधिक ऐप्स हैं (जैसा कि टीजे होलोवाचुक स्वयं [यहां] (http://vimeo.com/56166857) द्वारा सलाह दी गई है), फिर भी, अन्य पसंद करते हैं [स्थानीय सहायतागार] होने (https: // github।com/madhums/NodeJS-एक्सप्रेस-नेवला-डेमो/पेड़/मास्टर/परीक्षण)। मैं इस विधि को प्राथमिकता देता हूं क्योंकि मुझे 'आवश्यकताएं' ('utils') में 'utils' के पथ के बारे में चिंता करने की ज़रूरत नहीं है (अन्य सभी विधियां सापेक्ष पथ का उपयोग करेंगी)। – verybadalloc

+0

@varybadalloc: मुझे एक नोड प्रोजेक्ट तक पहुंच प्रदान की गई है (नोड मेरे लिए नया है) और ध्यान दें कि इसमें पहले से ही है: आवश्यकता है ('उपयोग') - जो एक मौजूदा नोड पैकेज प्रतीत होता है। कोई कनेक्शन सही नहीं है? यदि ऐसा है, तो मैं स्पष्टता के लिए अलग-अलग अपने सहायक मॉड्यूल का नाम दूंगा। – Sean

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