模块化nodejs中文件之间的函数
Modularize functions between files in nodejs
我很怀念在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 );
做了一些编辑,以帮助澄清我在这里试图实现的目标。
编辑:此链接显示如何使用多个回调进行异步瀑布
基于EDIT/理解的代码:
async.series([
function(callback) {
user.hashPass(password, function(err, result) {
callback(err,result);
})
}
], function(err, result) {
if (err) return err;
console.log('test',result);
});
它不起作用,因为您必须在要使用它的文件中"要求"您的模块,并且您正在不存在的构造函数上创建对象方法。相反,您可以创建一个用户对象(而不是构造函数),并将每个函数设置为对象属性,如下所示:
//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)
该方法唯一可能的问题是,在调用任一对象属性之前,必须定义所有参数。
代码中唯一需要更改的就是替换行
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
});
});
当我们一直需要自定义模块时,我们会按路径要求它们。
var User = require('config/passport');
var user = new User();
async.waterfall([
//how does this look
//do hashPass here
,
//do insertPass here
], //some callback );
相关文章:
- Jquery在函数之间传递表行
- d3中堆栈函数和嵌套函数之间的差异
- 如何在函数之间切换
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 在函数之间传递javascript变量
- 两个函数之间的角度承诺
- Javascript创建函数,以便在其他函数之间共享变量
- 直接绑定和使用每个函数之间的区别
- 节点模块对象范围:在所有函数之间共享一个对象
- js 函数之间使用参数的区别
- angularjs+ui.router:指令控制器和链接函数之间的不同行为
- 如何在onchange事件中的两个函数之间进行选择
- 在使用ajax调用的函数之间调用相同的函数
- 在JavaScript函数之间传递JSON值
- 试图理解JavaScript中原型和构造函数之间的区别
- 什么'新函数和函数之间的区别
- javascript函数之间的OR运算符
- 以下jquery和requireJS函数之间的区别
- 在Javascript中的函数之间共享变量