繁体   English   中英

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

[英]How to get result from function in other file in node.js

尝试从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中的响应?

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

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

这也将使您以可以告知用户的方式处理所有错误情况。

欢迎堆栈溢出。

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

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

也不要了解回调函数承诺异步的await异步功能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
        });
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM