nodejs 将值从一个模块传递到另一个模块

nodejs pass value from one module to another module

本文关键字:模块 一个 另一个 nodejs      更新时间:2023-09-26

在我的自定义模块中,我有此方法,它将查询数据库并查找用户名是否存在于我的数据库中。我希望返回一些值,以便在上层中我知道查询结果。

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