2015-12-13 23 views
9

Yani bir yönlendirme dosyasına app.local alınamıyor. , app.js dosyada ben routes/settings.js Ibenim express.js 4.13.3 yılında,

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

gibi o Var erişmeye çalıştığınızda ve ben app.get is not a function olsun sonra app.local Var

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

ayarlayın.

Ayrıca var dir = app.get.multimedia; ve var dir = app.locals('multimedia'); ve var dir = app.locals.multimedia; da denedim ve hala hiçbir şey.

Burada nelerin eksik?

Teşekkür

+0

benzer soru ve çözümü burada bakınız: http://stackoverflow.com/questions/34301795/node-js-passing-object-from- sunucu js-to-dış-modüller/34301907 # 34301907 – admix

cevap

2

sorun required('../app') çağrıldığında ne yapacağını tanımlanmamış olmasıdır. Aşağıda gösterildiği gibi module.exports kullanarak yapmalısınız. Bu sorunu çözmek için bu yaklaşımlardan birini deneyin.

Yaklaşım 1:

app.js dosyasına bu satırı ekleyin.

module.exports = app; 

Bu sadece require('../app') çağrıldığında app ihracat söylüyor.içinde require('routes/settings'); kullanırsanız, bu satır require('routes/settings');'dan önce yerleştirilmeli veya çalışmaz.

Yaklaşım 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); 

bu satırı ekleyin Artık sorunsuz app.get() kullanmak gerekir.

Örnek: module.exports yaklaşık

//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); 

Daha fazla bilgi

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

module.exports = settings; 

app.js olarak settings.js olarak here

+0

ben <% = settings.nameOfTheVar%> '' şöyle çiftleşmiş bir yerel var erişebilmesi gördüğümden beri tüm fikir bana geldi. Yani bana 'app.set' gibi javascript kodunda yerel bir yer edinmenin daha kolay bir yolu olmadığını ve daha sonra başka bir dosyada 'app.get' olduğunu mu söylüyorsun? Her neyse, yönteminizi şimdi test edeceğim ve size bildireceğim. – slevin

+0

Söylediğin her şeyi yaptım ve (...) 'gerektiren olsun hattına' atıfta konsolda bir function' değil (' ./ yolları/ayarlar) (uygulama) gerektiren; 'app.js içinde' '. Ayarlar.js yolundaki gönderme sürümümün 'exports.poster = işlev (app) { \t dönüş işlevi (req, res) { \t \t var dir = app.get ('çoklu ortam') olduğunu unutmayın; \t console.log (dir); Eğer module.exports' işlevi 'için' app' parametre geçmelidir çünkü \t} } 'Tabii – slevin

+0

bir istisna atar, ancak settings.js'' mevcut değildir. Yaklaşımı 2 kullanmak istiyorsanız 'exports.poster'' 'module.exports' olarak değiştirin. – shan1024

0

bulunabilir:

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

settings(app); 

Temelde bunları kullanmak istediğiniz yerden işlevini verebilir ve sonra app.js. bu dosyaları gerektirir

Örnek proje:

sunucusu.js:

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

settings(server); 

settings.js:

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

module.exports = settings; 

iki dosya aynı klasörde bulunmaktadır. çalıştırmak için: düğüm sunucu

Sonuç: enter image description here

İlgili konular