Javascript 无法从nodejs+;中的模块获取返回信息;节点mysql
我在本地主机上获得了以下代码: /model/company.jsJavascript 无法从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('
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
对象。一般来说,让数据库模块知道响应对象的工作方式可能不是一个好的做法。