使用nodejs

时间:2017-07-19 07:31:33

标签: javascript mysql node.js module

我是node.js的新手,对不起我的愚蠢问题。

我想分离和整理我的应用,以便轻松处理文件。出于这个原因,我创建了一个模块来执行我的mysql数据库,但是我遇到模块问题。我无法返回模块数据以在我的主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
        });
    }),
};

我的问题是什么?

1 个答案:

答案 0 :(得分:1)

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

<ContentPage.Content>
    <ScrollView>
        <StackLayout Margin="20" Spacing="10">
            <Label Text="How to connect to VPN." HorizontalOptions="Center" />
            <Label Text="If you have a corporate notebook, look for the Cisco AnyConnect application. Either in your start menu, on your desktop, or in your taskbar." />
            <Image Source="yourimage.jpg" HorizontalOptions="Fill" />
            <Label Text="Select your region and press the Connect button." />
        </StackLayout>
    </ScrollView>
</ContentPage.Content>

首先我可以说这不是一个正确的函数声明。而且我也看到最后你正在呼叫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

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