javascript - 使用nodejs将mysql数据从模块返回到app.js

标签 javascript mysql node.js module

我是 node.js 的新手,对于我的愚蠢问题感到抱歉。

我想分离和组织我的应用程序,以便轻松处理文件。由于这个原因,我创建了一个模块来执行我的 mysql 数据库,但我的模块有问题。我无法返回模块数据以在我的主 js 文件中使用 app.js

控制台显示未定义,浏览器不显示任何内容

这是我的代码

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
        });
    }),
};

我的问题是什么?

最佳答案

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

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);callback 不知从何而来......所以之前的代码可能如下所示:

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()是正确的代码,但是这个代码是异步的,你将不再得到任何东西......现在是使用回调的部分。所以之前的代码可以如下所示:

.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 */
        });
    });
})

检查一下您是否清楚该代码。如果您有任何疑问,请告诉我。

关于javascript - 使用nodejs将mysql数据从模块返回到app.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45183773/

相关文章:

javascript - 火狐 : Click event not calling on SPAN tag

javascript - 通过rails中的hidden_​​field传递值

javascript - 正则表达式完全匹配 ^abc$ 不起作用

ASP.NET 的 SqlCacheDependency 的 PHP 版本

php - 即使使用了 trim,也只有列表中的第一个条目进入 mysql 表 PHP

javascript - Next 未定义 next(err)

javascript - 始终显示 niceScroll rail

mysql - Rake 在 Mac OS X Lion 中显示连接错误

node.js - 使用 nodejs 代理

javascript - 火存储错误:"Nested arrays are not supported"。 Firestore/p5.js 问题