【问题标题】:Nodejs with ExpressJS including external js code files for use带有 ExpressJS 的 Nodejs,包括供使用的外部 js 代码文件
【发布时间】:2016-10-08 23:33:26
【问题描述】:

在这里学习 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 文件中执行类似的操作,但它对编译声明“throw new TypeError('app.use() requires middleware functions');”表示不满。我可以发誓我在某个地方读到了你可以做到的,但现在找不到资源。

/asp.js

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

在尝试组织 nodejs/expressjs 项目时,我仍然缺少基本的理解。

【问题讨论】:

  • 在第一个示例中添加原型函数时,您无需在函数前加上new

标签: javascript node.js express


【解决方案1】:

您在其中一个示例中实际使用了答案。您可以使用module.exports = whatever; 使模块可用。这意味着您可以导出任何字符串、对象或“类”。因此,您可以通过将其添加到文件末尾(或任何地方)来导出UserManager

module.exports = UserManager;

并通过使用其相对文件路径在另一个文件管理器中要求它。所以如果它在同一个目录中。

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

因此,对于需要 UserManager 的 local.strategy.js 文件,它看起来像:(如果您的文件路径都在同一个根目录中)

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

【讨论】:

  • 只需在此处添加...另一个困难的部分是在与“类”对象相同的 javascript 文件中定义用户的“模型”。我最终做的是以下。 module.exports = { User : User, UserManager : UserManager } 在另一个文件中完成要求时让它们都可以访问。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多