簡體   English   中英

帶有ExpressJS的Nodejs包括外部js代碼文件供使用

[英]Nodejs with ExpressJS including external js code files for use

在這里學習NodeJS ......我把這個非常基本的“類”文件放到外部JS文件中。 如何使我的所有路由文件和/或其他外部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項目時,感覺我仍然缺少基本的理解。

您實際上在一個示例中使用了答案。 您可以使用module.exports = whatever;使模塊可用module.exports = whatever; 這意味着您可以導出任何字符串,對象或“類”。 因此,您可以通過將此管理器添加到文件末尾(或實際上任何位置)來導出UserManager

module.exports = UserManager;

並通過使用其相對文件路徑在另一個文件管理器中要求它。 所以如果它在同一個目錄中。

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

因此,對於需要UserManager的local.strategy.js文件,它看起來像:(如果你的文件路徑都在同一根目錄下)

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM