Javascript 无法从nodejs+;中的模块获取返回信息;节点mysql

Javascript 无法从nodejs+;中的模块获取返回信息;节点mysql,javascript,mysql,node.js,node-mysql,Javascript,Mysql,Node.js,Node Mysql,我在本地主机上获得了以下代码: /model/company.js var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'admin' }); module.exports = { get: function(){ connection.query('

我在本地主机上获得了以下代码:

/model/company.js

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

module.exports = {
    get: function(){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            return rows;
        })
    }       
}
var Company    = require('../models/company')


var express = require('express');
var router = express.Router();

router.route('/companies').get(function(req, res){

    console.log(Company.get());
    //res.json(Company.get());


})
/routes/company.js

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

module.exports = {
    get: function(){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            return rows;
        })
    }       
}
var Company    = require('../models/company')


var express = require('express');
var router = express.Router();

router.route('/companies').get(function(req, res){

    console.log(Company.get());
    //res.json(Company.get());


})
我已经试过一些东西了,但我想应该是这样的。 但是我的
console.log
返回我的
未定义的
。我不知道我做错了什么

如果我这样做:

 connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
                console.log(rows)
            })
它起作用了


我需要做什么(或研究)?

您的get函数返回未定义的
,因为您没有指定返回值。您为回调函数指定了一个返回值,但外部函数不知道或不关心这一点。如果希望实现预期的行为,则需要将回调传递给
get
函数以访问
变量

试试这个:

 module.exports = {
    get: function(callback){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            // A 'node-style' callback will usually be callback(error, value)
            callback(null, rows);
        })
    }       
}
如果执行以下操作,您的console.log将正常工作:

Company.get(function(error, rows){
  console.log(rows);
}

有关javascript中异步行为的一般概述,请查看。

您需要返回json,如下所示

get: function(){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            res.json(rows);
        })
    }       

原因是您的
get
函数正在调用其中的异步函数。在调用
returnrows
时,实际上是将行返回到匿名函数,而不是
get
函数

这基本上就是你所拥有的:

module.exports = {
    get: function(){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            //This return is returning THIS function --^
            return rows;
        });

        return; //You're not returning anything. So it's undefined like just calling return.
    }       
}
你想要什么:

/model/company.js:

...

module.exports = {
    get: function(callback){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            callback(rows);
        })
    }       
}
...

router.route('/companies').get(function(req, res){
    Company.get(function (rows) {
        console.log(rows);
    });
})
/routes/company.js:

...

module.exports = {
    get: function(callback){
        connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            callback(rows);
        })
    }       
}
...

router.route('/companies').get(function(req, res){
    Company.get(function (rows) {
        console.log(rows);
    });
})

如果是这种情况,他还需要传入
res
对象。一般来说,让数据库模块知道响应对象的工作方式可能不是一个好的做法。