Как получить результат из функции в другом файле в node.js - PullRequest
0 голосов
/ 17 октября 2018

Попытка вызвать запрос к базе данных из другого файла javascript в NodeJS.

Пример файла базы данных:

function addUser(user) {

  connection.connect(function (err) {
    if (err) {
        console.error('Error connecting: ' + err);
    }
    console.log('Connected as id ' + connection.threadId);
  });

  var sql = "INSERT INTO `mobile`.`main` (`userId`) VALUES (?);"
  var inserts = [user];


  connection.query(sql, inserts, function (error, results) {
    console.log('query');
    if (error) {
        return error;
    } else {
        console.log('Success Query');
        return results;                
    }
  });
  connection.end(function (err) {
    if (err) {
        console.error('Error connecting: ' + err);
    }
    console.log('Connection closed!');
  });
}

module.exports = addUser;

Пример файла main.js:

app.get('/api/mysql/:user', function (req, res) {
  var user = req.params.user;
  addUsers(user)
  res.json({
    SQLResp: 'Query succes',
    result: addUsers.result
  });
});

Какполучить результат из первого файла и использовать его в качестве ответа в основной js?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Добро пожаловать в переполнение стека.

это отсутствует в файле базы данных, Как вы установили там соединение?

Вот пример примера над Какчтобы экспортировать соединение с базой данных и использовать его для выполнения вызовов из других файлов.

Также прочитайте о callbacks-functions , Promises , async-ожидают и асинхронные функции из JavaScript .Это основы JavaScript, которые также проходят через NodeJS docs .

DB.js:

const MYSQL                     = require('mysql');

const connection = MYSQL.createConnection({
    host:                       'localhost', // url of db
    user:                       'root',
    password:                   'root',
    database:                   'dbName'
});

module.exports = connection;

Теперь будем использовать это соединение из другого файла для вызова базы данных.

app.js:

const db = require('./DB'); // Path of your db connection file. I named it DB.js on same level as of app.js


function addUser(user) {

    // Since database calls are async in NodeJS thus using promises.
    return new Promise ( (resolve, reject) => {
        db.connect(function (err) {
            if (err) {
                console.error('Error connecting: ' + err);
                return reject(err);
            }
            console.log('Connected as id ' + connection.threadId);
        });

        var sql = "INSERT INTO `mobile`.`main` (`userId`) VALUES (?);"
        var inserts = [user];


        db.query(sql, inserts, function (error, results) {
            console.log('query');
            if (error) {
                return reject(err);
            } else {
                console.log('Success Query');
                return resolve(results);                
            }
        });

        db.end(function (err) {
            if (err) {
                console.error('Error connecting: ' + err);
            }
            console.log('Connection closed!');
        });
    });

}

app.get('/api/mysql/:user', function (req, res) {
    var user = req.params.user;

    addUsers(user)
    .then (result => {    // When addUsers will resolve promise will be in then.
        res.json({
            SQLResp: 'Query succes',
            result: result
        });
    })
    .catch(err => {        // If promise is rejected then on catch
        res.json({
            SQLResp: 'Query err',
            result: err
        });
    });
});
0 голосов
/ 17 октября 2018

Вам нужно передать обратный вызов в функцию addUser и вызвать его внутри вашего connection.query с результатами.

В настоящее время, когда вы возвращаетесь, вы возвращаетесь в другой обратный вызов, что означает, что данные более или менее выбрасываются.

Это также позволит вам обрабатывать все случаи ошибок вспособ, которым вы можете рассказать пользователю.

...