Как получить результат из функции в другом файле в node.js

1

Попытка вызвать запрос базы данных из другого файла 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?

Теги:
ecmascript-6
npm
node-modules

2 ответа

0
Лучший ответ

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

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

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

Также читайте о вызовах-функциях, обещаниях, асинхронных ожиданиях и асинхронных функциях JavaScript. Это основы JavaScript, а также доступ к документам NodeJS.

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
    Спасибо :) Я только начал с node.js и программирования в целом. Я думаю, что я пропустил некоторые основные вещи о функциях, когда я читал о них. Я надеюсь в будущем не задавать здесь много глупых вопросов: D
0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню