模块化nodejs中文件之间的功能

时间:2016-04-01 03:59:13

标签: javascript node.js express

我很想念nodejs中的这个概念。我想将一个函数放在./models/user文件夹中,假设代表我用于用户的模型。然后我想在其他地方使用这些作为函数。我经常遇到的问题是什么时候做像user.something这样的东西,它不像函数一样处理。我误解了它是如何工作的。

模型看起来像这样:

//model/user.js
function User() {
    this.foo = null;
}

User.prototype.hashPass = function (password, callback) {
    //Code that hashes a password
    callback(err, hash);
};

User.prototype.insertUser = function (email, password, callback) {
    //Code that inserts a user and returns some 'done' callback
    callback(err, done);
};

module.exports = User;

我程序中的其他地方可以说passport.js我想这样做:

//config/passport.js
var User = require('../models/user);
var user = new User();

async.waterfall([
    //how does this look
    //EDIT ATTEMPTED HERE
    user.hashPass(password, function(err, result) {

    }),
    user.insertUser(result, function(err, rows) {

    })
], //some callback );

进行了一些编辑,以帮助澄清我在这里要完成的任务。

编辑: 此链接显示了async waterfalls with multiple callbacks

的操作方法

基于编辑/理解的代码:

async.series([
  function(callback) {
    user.hashPass(password, function(err, result) {
      callback(err,result);
    })
  }
], function(err, result) {
  if (err) return err;
  console.log('test',result);
});

3 个答案:

答案 0 :(得分:2)

它不起作用,因为您必须在要使用它的文件中“要求”您的模块,并且您在不存在的构造函数上创建对象方法。相反,您可以创建一个用户对象(而不是构造函数)并将每个函数设置为对象属性,如下所示:

//module file
var user = {
  hashPass: function(password, callback){
   //password-hashing function 
  },
  insertUser: function(email, password, callback){
  //new user function
  }
};

module.exports = user;

然后,无论你想在哪个地方使用它,都是这样的:

//some other file
var user = require(path-to-module);

user.hashPass(); //pass in all parameters (password, callback)
user.insertUser(); //pass in all parameters (password, callback)

关于此方法的唯一可能的悬念是,您必须在调用对象属性之前定义所有参数。

答案 1 :(得分:1)

当我们需要自定义模块时,我们需要路径。

var User = require('config/passport');
var user = new User();

async.waterfall([
   //how does this look
   //do hashPass here
  ,
  //do insertPass here
], //some callback );

答案 2 :(得分:1)

您需要更改代码的唯一方法是替换

module.exports = User;

passport.js文件中

var User = require('../model/User');

然后你可以调用用户的功能:

user.hashPass(password, function(err, result) {
    user.insertUser(result, function(err, rows) {
      // do something with rows here
    });
});