无法从 nodejs + node-mysql 中的模块获取 return

Cannot get return from module in nodejs + 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('SELECT 1 + 1 AS solution', function(err, rows, fields) {
            return rows;
        })
    }       
}

/routes/company.js

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 returns 我 undefined。我不知道我做错了什么。

如果我这样做:

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

有效。

我需要做什么(或学习)?

你的 get 函数 returns undefined 因为你没有指定 return 值。您为回调函数指定了一个 return 值,但您的外部函数不知道或不关心它。如果您想要您期望的行为,您需要将回调传递给您的 get 函数以访问 rows 变量。

试试这个:

 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 中异步行为的一般概述,请查看 this answer

您需要return json 如下

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

原因是因为您的 get 函数正在调用其中的异步函数。在您调用 return rows 的地方,它实际上是将行返回给匿名函数而不是 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);
        })
    }       
}

/routes/company.js:

...

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