私はNodeJSの新機能で、パラメータを渡してクエリを実行して呼び出し側に応答を返す再利用可能な関数を作成するソリューションを見つけるのに苦労しています。 。データベースのクエリを必要とする100以上の関数が存在するため、このようにしたいと思います。コードサイズを減らすのに役立ちます。NodeJS MySQL非同期 - オブジェクトを呼び出し元関数に戻す
私は非常に基本的なテストとして以下を試しましたが、dbA_Read_Data()関数は常に非同期であるためundefined
を返します。しかし、6日後、15以上の代替コールバック/約束ソリューションが私のために働いていませんでしたが、私はこの問題を解決して次のことを達成することはできません。
const { Databases } = require('../../utils/enums');
var mysql = require('mysql');
function getAllUsers() {
//This function would be called when an endpoint is hit in my HapiJS system.
var myQuery = "SELECT * FROM Users WHERE Account_Status== 'ACTIVE' ";
var response = dbA_Read_Data(myQuery);
return response;
}
//dbA => website database, contains users/permissions/etc
//Other databases... you get the idea
function dbA_Read_Data(query) {
dbConn = createConnection("localhost", Databases.db_A.name, Databases.db_A.username, Databases.db_A.password);
dbConn.connect();
dbConn.query(query, function(err, rows, fields) {
if (err) throw err;
var myResponseObject = {
query: query,
data: {
count: rows.length,
records: rows
}
}
});
}
function createConnection(host, database, user, password) {
var connection = mysql.createConnection({
host: host,
user: user,
password: password,
database: database
});
return connection;
}
は、どのように私は、呼び出し元の関数に応答オブジェクトを返すように機能dbA_Read_Data(query)
を得るのですか?
を、私はこの3回を読んで試してみましたそれに従うが、私はまだ未定義になるか、単にエラーが出るだろう。もう少し具体的なガイダンスが必要です – user5156141
関数から何も返さなければ、常に未定義になります。 「単に発信者に返信する」ことはできません。これは、非同期応答では不可能です。応答を返すのをやめ、代わりにPromiseを返します。リンクされた質問はそれを行う方法を説明します。 – Paulpro