2015-12-13 10 views
9

Also, in meinem express.js 4.13.3. , In der app.js Datei richtete ich ein app.local varkann nicht app.local zu einer Routing-Datei

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

dann im routes/settings.js ich versuche, dass var zugreifen wie

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

und ich app.get is not a function.

Ich versuchte auch var dir = app.get.multimedia; und var dir = app.locals('multimedia'); und var dir = app.locals.multimedia; und immer noch nichts.

Was fehlt mir hier?

Dank

+0

Siehe ähnliche Frage und Lösung hier: http://stackoverflow.com/questions/34301795/node-js-passing-object-from- server-js-to-external-modules/34301907 # 34301907 – admix

Antwort

2

Das Problem ist, dass Sie nicht das, was, wenn required('../app') genannt zu tun definiert haben. Sie sollten dies unter Verwendung von module.exports wie unten gezeigt tun. Versuchen Sie einen dieser Ansätze, um dieses Problem zu beheben.

Ansatz 1:

Fügen Sie diese Zeile in die app.js Datei.

module.exports = app; 

Dieses einfach sagt der app zu exportieren, wenn require('../app') genannt wird. Wenn Sie require('routes/settings'); innerhalb der app.js verwenden, sollte diese Zeile vor der require('routes/settings'); platziert werden oder es wird nicht funktionieren.

Ansatz 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); 
    //............ 
} 

Fügen Sie diese Zeile zu app.js

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

Jetzt sollten Sie in der Lage sein, die app.get() ohne Probleme zu benutzen.

Beispiel:

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

Mehr Details über module.exports here gefunden werden kann

+0

Die ganze Idee kam mir, seit ich gesehen habe, dass ich auf eine lokale Var im Templating zugreifen kann so wie '<% = settings.nameOfTheVar%>'. Sie sagen mir also, dass es keinen einfacheren Weg gibt, ein lokales JavaScript in den JavaScript-Code zu bekommen, wie 'app.set' und dann in einer anderen Datei' app.get'? Jedenfalls werde ich jetzt Ihre Methode testen und Sie wissen lassen. – slevin

+0

Ich habe alles gemacht, was Sie gesagt haben, und ich bekomme 'require (...) ist keine Funktion' in der Konsole und verweist auf die Zeile' require ('./ routes/settings') (app); 'in der' app.js '. Beachten Sie, dass meine Version von in settings.js Route Posting ist 'exports.poster = function (app) { \t Rückkehrfunktion (erf, res) { \t \t var dir = app.get ('Multimedia'); \t console.log (dir); \t} } ' – slevin

+0

Natürlich löst es eine Ausnahme aus, weil Sie den' app' Parameter zu 'module.exports' Funktion übergeben sollten, aber es ist nicht in' settings.js' vorhanden. Ändern Sie 'exports.poster' in' module.exports', wenn Sie den Ansatz 2 verwenden möchten. – shan1024

0

In settings.js

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

module.exports = settings; 

In app.js:

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

settings(app); 

Grundsätzlich exportieren Sie die Funktion von wo Sie sie verwenden möchten und dann diese Dateien in app.js benötigen.

Beispielprojekt:

Server.js:

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

settings(server); 

settings.js:

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

module.exports = settings; 

Beide Dateien sind im selben Ordner. auszuführen: Knoten Server

Ergebnis: enter image description here

Verwandte Themen