我在localhost上获得了以下代码:
/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
会给我undefined
。我不知道自己做错了什么。
如果我这样做:
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
console.log(rows)
})
有效。
我需要做什么(或学习)?
答案 0 :(得分:2)
您的get函数返回undefined
,因为您没有指定返回值。您为回调函数指定了返回值,但您的外部函数不知道或不关心它。如果您想要所期望的行为,则需要将回调传递给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。
答案 1 :(得分:1)
原因是因为您的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);
});
})
答案 2 :(得分:-1)
您需要按如下方式返回json
get: function(){
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
res.json(rows);
})
}