我很想念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);
});
答案 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
});
});