如何从node.js中其他文件中的函数获取结果

时间:2018-10-16 21:42:59

标签: javascript node.js npm ecmascript-6 node-modules

尝试从NodeJS中的其他JavaScript文件调用数据库查询。

示例数据库文件:

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 :(得分:0)

您需要将回调传递到addUser函数中,并在connection.query内将其与结果一起调用。

当前,当您返回时,您将在另一个回调内部返回,这意味着数据或多或少被丢弃了。

这还将使您能够以一种可以告知用户的方式处理所有错误情况。

答案 1 :(得分:0)

欢迎堆栈溢出。

您的数据库文件中缺少此内容,您是如何在那里建立连接的?

这是有关如何导出数据库连接并使用它来从其他文件进行调用的示例示例。

还要阅读callbacks-functions中的Promisesasync-awaitAsynchronous functionsJavaScript。这些是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
        });
    });
});