2017-01-04 21 views
1

データベースからの特定のユーザの詳細になる簡単な操作を試みています。プーリングデータベースと他のすべての接続は完全に機能しますが、コールバックは機能しません。私はここで何か悪いことをしていますか?コールバックはノードjs内の関数ではありません

以下は私が使用するコードです。エラーが発生した場所を最後にここに

var express = require('express'); 
var app = express(); 

var crud = require('./routes/crud_op_new.js'); 
var search = require('./routes/search.js'); 

var connection; 
var result; 
app.get('/search',(req,res)=>{ 
    crud.connection(function (con) { 
    search.getuser(con,req.param('name'),result); 
    res.send(result); 
    }); 
}); 
app.listen(8003); 

がある... search.js

exports.getuser = function(connection,req,callback){ 
console.log("GET Request iniciated"); 
connection.query("select * from user,addr where name=? and user.id=addr.e_id",[req],(err,row)=>{ 
if(err){ 
    callback("DB ERROR: "+err); 
} 
else { 
    if(row.length==0){ 
    callback("No Records found"); 
    } 
    else { 
    callback(row); 
    } 
    } 
}); 
} 

db_crudがsearch.jsする資格情報を送信し、ここでコールバックが呼び出され

db_crud.js結果を送信する。 crud_op_new.jsはdbプール接続を作成し、変数conにあります。

+1

); '...' result'は関数ではありません。定義されていません...コールバックはコールバック関数 –

+0

です。私のロジックに関数コールバックを追加するにはどうすればよいですか? – VisheshRaju

+0

私は助けてくれる答えを追加しました –

答えて

1

を動作するはずバック

呼び出すことができるように、機能する必要があります答えでJaromanda Xで述べたように、resultはコールバックfunctionでなければなりません。

また、search.jsのコールバックは、両方とも最初の引数としてerrorresultに返されています。以下のようにエラーと結果を処理するには、callback(row)を​​に変更する必要があります。

注:node jsコールバック関数のベストプラクティスは次のようになり、最初の引数 エラー(エラーなしの場合ヌル)を返す必要があり、その後、残りの引数は、戻り 値とすることができます。あなたが関数 `search.getuser(CON、req.param( '名前')、結果を呼び出し

db_crud.js

var express = require('express'); 
var app = express(); 

var crud = require('./routes/crud_op_new.js'); 
var search = require('./routes/search.js'); 

var connection; 

app.get('/search',(req,res)=>{ 
    crud.connection(function (con) { 
    search.getuser(con,req.param('name'), function(err, result) { 
     if(err) { 
     res.status(501).send(err); 
     } else { 
     res.send(result); 
     } 
    }); 
    }); 
}); 
app.listen(8003); 

search.js

exports.getuser = function(connection,req,callback){ 
console.log("GET Request iniciated"); 
connection.query("select * from user,addr where name=? and user.id=addr.e_id",[req],(err,row)=>{ 
if(err){ 
    callback("DB ERROR: "+err); 
} 
else { 
    if(row.length==0){ 
    callback("No Records found"); 
    } 
    else { 
    callback(null, row); 
    } 
    } 
}); 
} 
+0

これは私が1つだけの引数を渡す場所で使用されるeirlerコールバックに影響しません! – VisheshRaju

+0

それは 'err'引数を渡してからではなく、' if(err){} 'の' db_crud.js'にチェックがあります。 – Aruna

1

あなたの機能search.getuser(con,req.param('name'),result);を呼ぶ... resultは関数ではありません、それは未定義だ...コールバックは、これは

app.get('/search',(req,res)=>{ 
    crud.connection(function (con) { 
    //         vvvvvvvvvvvvvvv this is the callback function 
    search.getuser(con,req.param('name'),function(result) { 
     res.send(result); 
    }); 
    }); 
}); 
+0

オハイオ州私はそれを得る!それは...私はコールバックロジックを持っています...ありがとう – VisheshRaju

関連する問題