2016-05-03 17 views
0

Mein entsprechenden Code wird in drei Dateien aufgeteilt:Wie übergebe ich Daten mit Mongoose an eine globale Variable?

user.server.model.js:

var UserSchema = new Schema({ 
     ...    
     devices: [] 
    }); 

mongoose.model('User', UserSchema); 

users.server.controller.js:

var User = require('mongoose').model('User') 

var devices = 123; 

exports.getDevices = function(req, res, next) { 
    User.findOne({ 
      _id: req.user.id 
     }, 
     function(err, user) { 
      if (err) { 
       return next(err); 
      } 
      else { 
       devices = req.user.devices; 
       res.json(devices)      
      } 
     } 
    ) 
} 

exports.devices = devices; 

index.server.controller Js:

var users = require('../../app/controllers/users.server.controller') 

exports.render = function(req, res) { 
    res.render('index', { 
     title: 'MEAN MVC', 
     user: req.user ? req.user.name: '', 
     device: users.devices 
    }); 
}; 

ich node.js verwende, Mungo, mongodb, Express, emb eddedjs.

Was ich tun muss ist, um die Geräte-Array und übergeben Sie es auf die eine oder andere Weise auf meiner Indexseite wo kann ich dann dort mit ejs behandeln. Da ich keine Erfahrung mit JavaScript habe, habe ich keine klare Lösung gefunden. Daher habe ich beschlossen, die Daten an eine globale Variable "Geräte" zu übergeben und sie dann an den Indexseiten-Controller zu übergeben.

nun das Problem, das ich bin vor, dass getDevices Funktion ‚Geräte‘ nicht die globale Variable ändern. Was ich sicher weiß, ist, dass res.json (Geräte) gibt ein korrektes Ergebnis Geräte Array in Plain JSON und dass der Standardwert (123) der globalen Variablen 'Geräte' ist zu meinem übergeben Indexseite Controller und in der Seite gerendert.

Jeder andere Vorschlag, wie mein Bedürfnis gelöst werden sollte, wird sehr geschätzt.

Vielen Dank.

Antwort

0

devices ist keine globale Variable: es ist nur innerhalb der Datei zugänglich, die es enthält, in Ihrem Fall users.server.controller.js.

Sie müssen devices exportieren, genau wie bei der Methode getDevices. In users.server.controller.js, tun exports.devices = 123 und exports.devices = req.user.devices. Dann wird users.devices in index.server.controller.js ordnungsgemäß funktionieren.

EDIT: Allerdings einen Wert aus einer Methode wie das ist keine sehr gute/elegante Lösung, scheint es getDevices sollte die Geräte-Array zurückgeben. Wenn der Grund, warum Sie sich so entschieden haben, darin liegt, dass Mongoos findOne das Ergebnis in einem Callback zurückgibt, ziehen Sie in Betracht, einen anderen Callback unter getDevices zu verwenden, oder schauen Sie sich Versprechungen an.

+0

@NeymusLastneymus '{Objekt Objekt}' erhalten Sie, wenn Sie versuchen, ein Objekt in eine Zeichenfolge zu konvertieren. 'users.devices' ist ein JavaScript-Objekt, nicht JSON. Wenn du meinst, dass du es in * JSON konvertieren willst, kannst du 'JSON.stringify' verwenden. Allerdings sollte das für 'res.json()' nicht nötig sein - das erledigt das schon für Sie. –

+0

Vielen Dank. –

Verwandte Themen