nodejs 将值从一个模块传递到另一个模块
nodejs pass value from one module to another module
在我的自定义模块中,我有此方法,它将查询数据库并查找用户名是否存在于我的数据库中。我希望返回一些值,以便在上层中我知道查询结果。
var findUserbyUsername=function(username)
{
db.users.find({email:username},function(err,result)
{
if(err|!username) {console.log('username not found'); return 0;}
else return 1;
}
);
}
module.exports.findUser=findUserbyUsername;
在应用程序中.js我将像这样调用上述方法
var lt=dbutil.findUser('xxxx@gmail.com');
但不幸的是,我没有得到定义....谁能帮我解决这个问题?或任何其他建议?
这是一个异步代码,当然它不会返回任何内容。您可能需要以下内容:
应用.js:
dbutil.findUser( 'xx@gmail.com', function( err, data ) {
if ( err ) throw err;
// Handle the datas returned "data"
} );
模块:
var findUserByUserName = function( username, callback ) {
db.users.find( { email: username }, function( err, result ) {
if ( err || !username ) {
console.log( 'username not found' );
// Call the function passed as parameter
callback( err ); // You give "undefined" as second parameter
}
else {
callback( err, result ); // You give the datas back
}
} );
} );
您的findUserbyUsername
函数不返回任何内容,这就是您获得undefined
的原因。由于数据库操作在 Node 中是异步的,因此无法返回任何有意义的内容并通过回调工作。像这样更改代码:
var findUserbyUsername = function(username, callback) {
db.users.find({ email: username }, function(err, result) {
if (err || !username) {
console.log('username not found');
callback(err? err: 'Username not found');
} else {
callback(null, whateverYouWantToReturn);
}
});
}
module.exports.findUser = findUserbyUsername;
并像这样使用它:
dbutil.findUser('xxxx@gmail.com', function(err, result) {
// you have the result from findUserbyUsername() in "result", and "err" is set if there was an error
});
(注意:我也修复了你的条件if(err|!username)
,因为|
是一个按位运算符,你实际上想要||
逻辑运算符)
(编辑:在回调中添加了事实上的标准err
参数)
问题是你的函数中有一个异步请求,所以 db.users.find 中的返回值在错误的范围内,并且永远不会回到你的请求。
您需要将回调函数作为第二个参数传递,因此代码如下所示:
var findUserbyUsername=function(username, cb)
{
db.users.find({email:username}, cb);
}
module.exports.findUser=findUserbyUsername;
然后你可以像这样调用该函数:
dbutil.findUser('xxxx@gmail.com', function(err, username) {
if (err) {
// Handle err
} else {
// Handle username
}
})
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- 如何定义一个模块并使用它来分离js文件
- 聚合物是一个框架而不是一个库.如何模块化地使用web组件
- 需要从一个文件中获取多个模块
- 在一个表达式中加载并使用ES6模块
- 在我的JavaScript模块中绑定一个点击事件
- ESDoc将我所有的模块方法放在一个标题下,而不是放在每个文件下,我该如何改变这种行为
- 从一个模块暴露到另一个模块
- 查找与锁定和更新调度相关的一个或两个节点模块
- NodeJS:一个全局EventEmitter或每个模块它'他自己的
- 如何将多个 AMD 模块捆绑在一个文件中
- 节点模块对象范围:在所有函数之间共享一个对象
- 从导出的模块返回变量,并在另一个文件(NodeJS)中使用它
- 在节点中.js“模块”始终是一个对象
- 在单独的模块中放入一个脚本
- Node.js创建一个模块来收集内存(ram)信息
- 如何从另一个模块调用函数
- 无法调用requirejs中的另一个模块
- 无法导入模块:您可能需要一个合适的加载程序