2016-10-08 1 views
1

обучения NodeJS здесь ... У меня есть этот очень простой «классный» файл, который я поместил во внешний JS-файл. Как сделать это доступным для всех моих файлов маршрутизации и/или других внешних js-файлов (которые я также хотел бы загрузить)?Nodejs с ExpressJS, включая внешние файлы кода js для использования

/classes/music/usermanager.js

function User(){ 
    this.email = ""; 
    this.password = ""; 
    this.userid = ""; 
} 

function UserManager() 
{ 
    this.user = new User(); 
} 

UserManager.prototype.login = new function (email, password){ 
    var db = new DbManager(); 
    db.Open(); 
    params = { 
     $email : email, 
     $password : password 
    } 
    db.serialize(function(){ 
     db.get("SELECT * FROM Users WHERE email = $email and password =  $password", params, function(err,row) { 
     if (!err && row) { 
      //log in passed 
      this.user.userid = row.user.id; 
      this.user.email = row.user.email; 
      this.user.password = row.user.password; 
      return this.user; 
     } 
     else if (!err) { 
      //log in failed log event 
      return null; 
     } 
     else { 
      //error happened through out an event to log the error 
      return null; 
     } 
    }); 
}); 
} 

/config/strategies/local.strategy.js пример того, как я бы использовать его в другом файле.

var passport = require('passport'); 
LocalStrategy = require('passport-local').Strategy; 

module.exports = function() { 
    passport.use(new LocalStrategy({ 
     usernameField: 'email', 
     passwordField: 'password' 
    }, 
    function (email, password, done) { 
     //vadliating user here 
     var userManager = new UserManager(); 
     var user = userManager.login(email, password); 
     done(null, user); 
    })); 
}; 

Я пытался сделать что-то подобное в моем app.js файле и ненадежен по составлению заявив, что «бросить новый TypeError („app.use() требуется функции промежуточного“);». Я мог бы поклясться, что я читал где-нибудь, что вы могли бы это сделать, но теперь не можете найти ресурс.

/asp.js

/*load external js library files for application use*/ 
app.use ("./classes/music/:path*"); 

Есть ощущение, я отсутствующий основной на понимание здесь еще при попытке организовать проект nodejs/expressjs.

+1

Перед добавлением функции прототипа в первый пример вам не нужно вводить 'new' перед функцией. – bspates

ответ

0

Фактически вы используете ответ в одном из ваших примеров. Вы делаете модули доступными с помощью module.exports = whatever;. Это означает, что вы можете экспортировать любую строку, объект или «класс». Таким образом, вы можете экспортировать UserManager, добавив это в конец файла (или действительно в любом месте).

module.exports = UserManager; 

и требует его в другом файле, используя его относительный путь к файлу. Так что если он находится в том же каталоге.

var UserManager = require('./usermanager.js'); 

Так что для файла local.strategy.js требовать UserManager это будет выглядеть следующим образом: (если вы все Пути к файлам в одной и той же корневой директории)

var UserManager = require('../../classes/music/usermanager.js'); 
+0

Просто добавив это здесь ... Другая сложная часть заключалась в том, что «модель» пользователя была определена в том же файле javascript, что и объект «class». То, что я закончил, - это следующее. module.exports = { Пользователь: Пользователь, UserManager: UserManager } иметь их как доступными, когда требуют было сделано в другом файле. –

0

/classes/music/usermanager.js

// Working for me, try it, hope this may help you 

    var model = module.exports; 

    function User() { 
    this.email = ""; 
    this.password = ""; 
    this.userid = ""; 
    } 

function UserManager() { 
    this.user = new User(); 

    } 

UserManager.prototype.login = function(email, password) { 

     var db = new DbManager(); 
    db.Open(); 
    params = { 
     $email : email, 
     $password : password 
    } 
    db.serialize(function(){ 
     db.get("SELECT * FROM Users WHERE email = $email and password =  $password", params, function(err,row) { 
     if (!err && row) { 
      //log in passed 
      this.user.userid = row.user.id; 
      this.user.email = row.user.email; 
      this.user.password = row.user.password; 
      return this.user; 
     } 
     else if (!err) { 
      //log in failed log event 
      return null; 
     } 
     else { 
      //error happened through out an event to log the error 
      return null; 
     } 
    }); 

    });  
    }; 


model.login = function (email, password){  
var usrmng = new UserManager(); 
    return usrmng.login(email, password); 
    }; 

/config/strategies/local.strategy.js

var usermanager = require('./usermanager'); // path to ur file 


    var passport = require('passport'); 
    LocalStrategy = require('passport-local').Strategy; 

    module.exports = function() { 
    passport.use(new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password' 
    }, 
    function (email, password, done) { 
    //vadliating user here 
    //var userManager = new UserManager(); 
    var use = usermanager.login(email, password); 
    done(null, user); 
    })); 
}; 
Смежные вопросы