无法从 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);
});
})
我在我的本地主机上得到了以下代码:
/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);
});
})