2

データベースから値を取得しようとしています。デモの例で試してみてください。しかし、コールバック関数を使用して、呼び出しを同期するのに問題があります。私はnode.jsの初心者なので、これが正しい方法かどうかわかりません。

ファイル1:app.js

var data;

var db = require('./db.js');

var query = 'SELECT 1 + 1 AS solution';

var r = db.demo(query, function(result) { data = result; });

console.log( 'Data : ' + data);

ファイル2:db.js

var mysql      = require('./node_modules/mysql');

var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'root',
});

module.exports.demo = function(queryString, callback) {
    try {
        connection.connect();
        console.log('Step 1');

        connection.query(queryString, function(err, rows, fields) {
            console.log('Step 2');
            if (err) {
                console.log("ERROR : " + err);
            }
            console.log('The solution is: ', rows[0].solution);

            callback(rows[0].solution);

            return rows[0].solution;
        });
        callback();

        connection.end();
        console.log('Step 3');
    }
    catch(ex) {
        console.log("EXCEPTION : " + ex);
    }
};

出力:

Step 1
Step 3
Data : undefined
Step 2
The solution is:  2

この質問も参照しましたが、私の問題は解決しませんでした: コールバックからのnodeJSの戻り値

4

2 に答える 2

3

問題はこれです:

var r = db.demo(query, function(result) { data = result; });

console.log( 'Data : ' + data);

console.logは非同期であるため、コールバック関数が呼び出される前に実行されます。db.demoつまり、完了するまでに時間がかかる場合がありますが、その間、コードの次の行である、console.logが実行されます。

結果にアクセスする場合は、コールバック関数が呼び出されるのを待つ必要があります。

var r = db.demo(query, function(result) { 
  console.log( 'Data : ' + result);
});

これは、I / Oを処理するほとんどのコードがNodeで機能する方法であるため、それについて学ぶことが重要です。

于 2013-03-26T11:41:23.760 に答える
0

これが私の解決策です

ファイル内db.js


require('dotenv').config();
const mysql = require('mysql');

const con = mysql.createConnection({
  user: process.env.SQL_USER,
  host: process.env.SQL_HOST,
  database: process.env.SQL_DB,
  password: process.env.SQL_PSWD,
  port: 3306,
});

async function connect() {
  try {
    await con.connect();
    console.log("Connected to MySql!");
  } catch (err) {
    console.log(err);
  }
}

module.exports = { connect };

次に、別のファイルindex.jsで

const db = require("./data/db");

db.connect();
于 2022-01-30T15:57:53.793 に答える