2015-12-13 9 views
9

तो, मेरे express.js 4.13.3 में। , app.js फ़ाइल में मैं एक app.local वरऐप.लोकल नहीं हो सकता है रूटिंग फ़ाइल

app.set('multimedia', __dirname + '/public/multimedia');

सेट तो routes/settings.js में मैं जैसे

var app = require('../app'); 
var dir = app.get('multimedia'); 

कि वर का उपयोग करने की कोशिश करते हैं और मैं app.get is not a function मिलता है।

मैंने var dir = app.get.multimedia; और var dir = app.locals('multimedia'); और var dir = app.locals.multimedia; और अभी भी कुछ भी नहीं किया।

मुझे यहां क्या याद आ रही है?

धन्यवाद

+0

यहाँ समान प्रश्न और में समाधान देखें: http://stackoverflow.com/questions/34301795/node-js-passing-object-from- सर्वर-js करने वाली बाहरी-मॉड्यूल/34301907 # 34301907 – admix

उत्तर

2

समस्या है कि तुम क्या जब required('../app') कहा जाता है ऐसा करने के लिए निर्धारित नहीं किया है कि है। आपको नीचे दिखाए गए अनुसार module.exports का उपयोग करके ऐसा करना चाहिए। इस समस्या को ठीक करने के लिए इन दृष्टिकोणों में से एक आज़माएं।

दृष्टिकोण 1:

app.js फाइल करने के लिए इस लाइन में जोड़ें।

module.exports = app; 

यह केवल app निर्यात करने के लिए जब भी require('../app') कहा जाता है कहते हैं। यदि आप require('routes/settings'); का उपयोग app.js के भीतर करते हैं, तो यह लाइन require('routes/settings'); से पहले रखी जानी चाहिए या यह काम नहीं करेगी।

दृष्टिकोण 2:

//change the `routes/settings.js` like this 
module.exports = function (app) {//notice that you pass the app to this 
    //............  
    var dir = app.get('multimedia'); 
    console.log(dir); 
    //............ 
} 

app.js

require('routes/settings')(app); 

को यह पंक्ति जोड़ें अब आप किसी भी समस्या के बिना app.get() का उपयोग करने में सक्षम होना चाहिए।

उदाहरण:

//app.js 
var express=require('express'); 

var app = express(); 

app.set('multimedia', __dirname + '/public/multimedia'); 

app.get('/',function(req,res){ 
    res.send('Hello World!'); 
}); 

var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Listening at http://%s:%s', host, port); 
}); 

module.exports=app; 

require('./settings'); 



//settings.js 
var app= require('./app'); 

var dir = app.get('multimedia'); 

console.log(dir); 

अधिक module.exports के बारे में विवरण here

+0

के बाद से मैंने देखा कि मैं 'तो जैसे templating में एक स्थानीय वर उपयोग कर सकते हैं <% = settings.nameOfTheVar%>' पूरे विचार मेरे पास आए। तो तुम मुझे कह रहे हैं जावास्क्रिप्ट कोड में एक स्थानीय प्राप्त करने के लिए कोई आसान तरीका है एक और फ़ाइल, 'app.get' में' app.set' की तरह है कि, और फिर,? वैसे भी मैं अब अपनी विधि का परीक्षण करने और आपको बता दूँगी। – slevin

+0

मैं सब कुछ तुमने कहा था और मैं 'आवश्यकता मिल (...) लाइन' की चर्चा करते हुए कंसोल में एक function' नहीं है ('./ मार्गों/सेटिंग्स') (एप्लिकेशन) की आवश्यकता होती है; '' app.js में '। ध्यान दें कि सेटिंग्स.जेएस रूट में पोस्ट करने का मेरा संस्करण 'export.poster = function (एप) { \t रिटर्न फ़ंक्शन (रिक, आरएस) { \t var dir = app.get ('मल्टीमीडिया') है; \t console.log (dir); \t} } ' – slevin

+0

बेशक यह एक अपवाद फेंकता है क्योंकि आपको' app' पैरामीटर को 'module.exports' फ़ंक्शन में पास करना चाहिए, लेकिन यह' settings.js' में मौजूद नहीं है। 'Module.exports' को' exports.poster' बदलें यदि आप दृष्टिकोण 2 उपयोग करना चाहते हैं। – shan1024

0

पाया जा सकता है settings.js में

function settings(app) { 
    console.log(app); 
    // etc... 
} 

module.exports = settings; 

app.js में:

var settings = require('./settings'), 
    express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    ... 
    ... 

settings(app); 

असल में आप उस फ़ंक्शन को निर्यात करते हैं जहां से आप उनका उपयोग करना चाहते हैं और फिर उन फ़ाइलों को app.js. में चाहिए।

नमूना परियोजना:

सर्वर।js:

var settings= require('./settings'), 
server = require('http'); 

settings(server); 

settings.js:

function settings(server) { 
    console.log("Hello"); 
    console.log(server); 
} 

module.exports = settings; 

दोनों फ़ाइलें एक ही फ़ोल्डर में हैं। चलाने के लिए: नोड सर्वर

परिणाम: enter image description here

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