2016-04-29 7 views
0

Ich schreibe meine erste Nodejs App, und ich bekomme einen Fehler, wenn ich ein Stück Code in eine externe JS-Datei verschieben. der Code, den ich zu bewegen, bin versucht, eine mongodb Schemadeklaration:Nodejs undefined var, wenn separaten Code in Modellen

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

//--------------------users ------------ 
var usersSchema = new Schema({ 
    email: String, 
    name: String, 
    phoneNumber: String, 
    BirthDate: Date, 
    loginpwd:String 
}); 

var UserModel = mongoose.model('users', usersSchema); 

I-Dateisystem-Modul bin mit der externen Datei laden:

fs.readdirSync(__dirname+'/models').forEach(function(filename){ 
    if (~filename.indexOf('.js')) 
     require(__dirname+'/models/'+ filename); 
    console.log(filename+" added"); 
}); 

der folgende Block nicht gut funktioniert, wenn ich trenne der Code, ein "undefined UserModel" Fehler werfen:

var userData = new UserModel({email : req.body.edtEmail, 
             name: req.body.edtName, 
             phoneNumber: req.body.edtPhoneNumber, 
             BirthDate: req.body.edtBirthDate, 
             loginpwd: req.body.edtSenha}); 
// save user data to database 
userData.save(function(err, record){ 
    if(err) throw err; 

    // session setting 
    req.session.userEmail = req.body.edtEmail; 
    req.session.name = req.body.edtName; 
    req.session.phoneNumber = req.body.edtPhoneNumber; 
    req.session.birthDate = req.body.edtBirthDate; 
    req.session.userId = record._id; 
    res.redirect('/dashboard'); 
}); 

der folgende Code funktioniert gut in beide Inline-Code oder "in der Datei" Code:

app.get('/users/json', function(req, res){ 
    mongoose.model('users').find(function(err, users){ 
     res.send(users); 
    }); 
}); 

Mache ich etwas falsch beim Laden externer Datei? oder etwas fehlt?

Antwort

1

Es gibt ein eingebautes System in NodeJs, um Dateien zu laden.

Ich bin nicht wirklich sicher, was Sie tun möchten, aber in NodeJS würden Sie so etwas wie dieses

//Lets say this file is called UserModel.js 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

//-------------------- rest of you code ------------ 


var UserModel = mongoose.model('users', usersSchema); 
module.exports = UserModel; //this is important 

als in einer anderen Datei tun laden Sie könnten nur diese

var UserModel = require('UserModel'); 
var bob = new UserModel({ .... 

so können Sie arbeite mit deinem UserModel. Lesen Sie vielleicht die Dokumentation über erfordern

+0

Es funktioniert mit var userData = new UserModel.userModel. Also habe ich den exportierten Alias ​​geändert, um ihn lesbarer zu machen. Der Code wurde in "var userData = new UserModel.user ({...") geändert –

0

Auch verwenden wie:

in Ihrer Schema-Datei: (zB Verzeichnis "model/userModel.js")

... 
mongoose.model('UserModel', usersSchema); 

in Steuerung oder eine andere Datei, in der Sie verwenden möchten: (zB Verzeichnis "Controller/userController.js")

require('../models/userModel');// load user model 
var mongoose = require('mongoose'), 
    UserModel = mongoose.model('UserModel'), 

var userData = new UserModel({email : req.body.edtEmail, //rest of code...}); 

userData.save(function(err, record){ //rest of code ... 

und kann für route wie: (folgen wie als controller)

app.get('/users/json', function(req, res){ 
    UserModel.find(function(err, users){ 
     res.send(users); 
    }); 
}); 
Verwandte Themen