2017-12-30 96 views
0

ノードを使用してSQL Server DBからデータを取得しようとしています。関数を実行して接続したりデータを取得することはできますが、関数をAPIのエンドポイントに変換したいと考えています。Express GETリクエストの結果のエラー: "res.sendは関数ではありません"

res変数が最後のifステートメントに渡されていないと思われるエラーに基づいていますが、この問題は発生していません。

GETメソッドを郵便配達員から使用すると、res.send is not a functionエラーが発生します。

let mssqlQuery = function(query, res) { 
    sql.connect(dbConfig, function(err) { 
    if (err) { 
     console.log("Error while connecting database :- " + err) 
     res.send(err) 
    } else { 
     let request = new sql.Request(); 
     request.query(query, function(err, res) { 
     if (err) { 
      console.log("Error while querying database :- " + err) 
      res.send(err) 
     } else { 
      res.send(res) // res.send is not a function 
     } 
     }) 
    } 
    }) 
} 

// GET API 
app.get("/api/address", function(req, res) { 
    var query = "select * from address" 
    mssqlQuery(query, res) 
}) 

res変数が不適切スコープまたは私は完全に間違ったアプローチがある可能性がありますか?

+2

'request.query()'の内側の 'res'は、関数の外側のものをシャドーイングしています。 1つの名前を変更しても問題ありません。 – Sirko

+0

コードスニペットを送信できますか?私はあなたが言っていることを試してみたが、まだ間違いをしたと思う。 8行目と13行目を参照していますか?私はあなたのコメントに対する私の理解を反映するために質問を編集しました。 – KVNA

答えて

0

@Sirkoが示唆したように、res値は他の変数によってシャドーされていました。修正されたコード:

let mssqlQuery = function(query, res) { 
    sql.connect(dbConfig, function(err) { 
    if (err) { 
     console.log("Error while connecting database :- " + err) 
     res.send(err) 
    } else { 
     let request = new sql.Request(); 
     request.query(query, function(err, resp) { // Changed res to resp 
     if (err) { 
      console.log("Error while querying database :- " + err) 
      res.send(err) 
     } else { 
      res.send(resp) // res.send is not a function 
     } 
     }) 
    } 
    }) 
} 
関連する問題