2017-07-19 56 views
0

我是node.js中的新手,我为我的愚蠢问题感到抱歉。使用nodejs将模块中的mysql数据返回到app.js

我想分开和组织我的应用程序,以方便使用文件。为此,我创建一个模块做我的mysql数据库有,但我有module.I问题不能返回模块的数据在我的主要JS使用的文件app.js

控制台显示undefined和浏览器显示什么

这里是我的代码

App.js

var express = require('express'), 
    mysql = require('mysql'), 
    bodyParser = require('body-parser'); 

var app = express(); 
// app.set('view engine', 'jade'); 

var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "", 
    database: 'database' 
}); 
var port = process.env.PORT || 8080; 
var User = require('./models/userModels'); 
var bookRouter = express.Router(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 

bookRouter.route('/books') 
     .post(function (req, res) { 
      // console.log(book); 
      // res.send(book); 
     }) 
     .get(function (req, res) { 
      res.send(User.allUsers); // <--- shows nothing 
      console.log(User.allUsers); //<--- returned undefined 
     }); 

app.use('/api', bookRouter); 

app.get('/', function (req, res) { 
    res.send('welcome to my API'); 
}); 

app.listen(port, function() { 
    console.log('Running on PORT via gulp ' + port); 
}); 

userModels.js

var mysql = require('mysql'); 

var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "", 
    database: "luxa" 
}); 

module.exports = { 
    allUsers: con.connect(function (err) { 
     if (err) throw err; 
     con.query("SELECT * FROM users", function (err, result, fields) { 
      if (err) throw err; 
      // console.log(result); // return result correctly 
      // return result; 
      callback(err, result); // Error 
     }); 
    }), 
}; 

我的问题是什么?

+0

'userModels'里面有什么? – LEQADA

+0

@LEQADA抱歉,'userModule.js'中的一个错误实际上是'userModel.js'我编辑代码 –

+0

看起来还是有错误。文件名是'userModel',但是你导入'userModels' – LEQADA

回答

1

好的,我在这里看到很多错误的代码。让我们来看看这部分:

allUsers: con.connect(function(err) { 
    if (err) throw err; 
     con.query("SELECT * FROM users", function (err, result, fields) { 
      if (err) throw err; 
      // console.log(result); // return result correctly 
      // return result; 
      callback(err , result); // Error 
     }); 
    }) ... 

首先我可以说这不是一个正确的函数声明。同时,我看到最后,你在呼唤callback(err , result);回调从无处来了...所以前面的代码看起来是这样的:

allUsers: function (callback) { 
    con.connect(function (err1) { 
     if (err1){ 
      /* use return to prevent the code to continue */ 
      return callback(err1, null); 
     } 
     con.query("SELECT * FROM users", function (err2, result, fields) { 
      if (err2){ 
       return callback(err2, null); 
      } 
      callback(err2, result); 
     }); 
    }); 
} 

现在,让我们对您的这部分代码看看:

.get(function (req , res) { 
    res.send(User.allUsers); // <--- shows nothing 
    console.log(User.allUsers); //<--- returned undefined 
}) 

基本上,当你做User.allUsers你什么都不做,只是传递函数本身。如果你想调用函数使用(),所以User.allUsers()是正确的代码,但是这个代码是异步的,你将不会再得到任何东西......现在来使用callback的部分。所以,上面的代码可以是这样的:

.get(function (req, res) { 
    /* the code is async so first obtain the data then use res.send() */ 
    User.allUsers(function (err, results) { 
     res.send({ 
      error: err, /* here you should have any error if it happens */ 
      results: results /* here you should have your results */ 
     }); 
    }); 
}) 

检查,看看代码是明确的给你。如果您有任何问题,请告诉我。

+0

谢谢,这对我的问题工作正常和抱歉,我从星期天开始学习,我的错误是愚蠢的。感谢您的帮助 –

+0

不客气,希望您能更好地理解javascript并学习新东西。我很高兴这段代码适合你:)祝你好运! – codtex