2017-07-14 11 views
0

NodeJSでSQL Serverを使用していて、データを取得していることを確認しましたが、データを呼び出し元関数に戻そうとしています。ここでNodeJS MSSQLドライバ呼び出し関数へのデータの受け渡し

は、データベースを照会機能への私の呼び出しです:

const dbq = require('./dbquery.js'); 
app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    var set = dbq.getPersonById(req.params.id); 
    console.log(set); 
}); 

、ここではdbquery.js内部関数です。

qry.getPersonById = (id) => { 

    mssql.connect(sqlConfig).then(() => { 
    new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{ 
     console.log(record); 
     return record; 
    }).catch((err)=>{ 
     console.log(err); 
    }); 
    }); 
} 

関数への私の呼び出しは次のようになりますか?そのため非同期な性質の

var dataset = await(dbq.getPersonById(req.params.id));

答えて

0

あなたがに対処するためのクライアントへの約束(二つの追加returnsに注意してください)返す必要があります:、その後約束

とクライアントのお得な情報を

qry.getPersonById = (id) => { 

    return mssql.connect(sqlConfig).then(() => { 
    return new mssql.Request().query(`...`) 
     .then((record)=>{ 
      console.log(record); 
      return record; 
     }) 
     .catch((err)=>{ 
      console.log(err); 
     }); 
    }); 

} 

app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    dbq.getPersonById(req.params.id).then(set => 
    console.log(set); 
); 
}); 

約束を書いてasync/awaitに書き換えると、 nは前

qry.getPersonById = async (id) => { 

    try { 
    await mssql.connect(sqlConfig) 
    var record = await new mssql.Request().query(`...`); 
    console.log(record); 
    return record; 
    } 
    catch (err) { 
    console.log(err); 
    } 
} 

app.get('/:id', async (req, res) => { 
    reqlog(`/${req.params.id}`); 
    var set = await dbq.getPersonById(req.params.id); 
    console.log(set); 
}); 
+0

非常にニース!私はこの解決策を試し、将来のプロジェクトのためにそれを保持します。 –

1

次のために試してみてください。

const dbq = require('./dbquery.js'); 
app.get('/:id', (req, res) => { 
    reqlog(`/${req.params.id}`); 
    dbq.getPersonById(req.params.id, function(err, res){ 
     console.log(res); 
    });  
}); 


qry.getPersonById = (id, callback) => { 

    mssql.connect(sqlConfig).then(() => { 
     new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{ 
      console.log(record); 
      callback(null, record); 
     }).catch((err)=>{ 
      console.log(err); 
     }); 
     }); 
    } 
+0

非常に巧妙な、常に使用コールバックを持っていますが、1を必要なものを書いたことはありません!それは優れた解決策です!今実装する。ありがとう! –

+0

@ChrisRutherford:あなたがすでに約束をしていたことを考慮すると、技術的には正しいものの、コールバックに「ダウングレード」する必要はありません。私の答えを見てください。 –

+0

@WiktorZychla私は、ありがとう! –

関連する問題