2017-07-19 3 views
0

Ich bin ein Neuling in node.js und es tut mir leid für meine dumme Frage.return mysql Daten von Modul zu app.js mit nodejs

Ich möchte meine App für die einfache Arbeit mit Dateien zu trennen und zu organisieren. Aus diesem Grund erstelle ich ein Modul meine MySQL-Datenbank gibt es zu tun, aber ich habe Probleme mit module.I kann nicht Moduldaten zu verwenden, in meinem Haupt-JS-Datei app.js

Konsole zeigt undefined und Browser zeigt nichts

zurückkehren hier ist mein Code

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

Was ist mein Problem?

+0

Was ist in 'userModels' drin? – LEQADA

+0

@LEQADA Entschuldigung, das war ein Fehler in 'userModule.js' in der Tat das ist' userModel.js' Ich bearbeite den Code –

+0

Sieht so aus, als gäbe es immer noch einen Fehler. Dateiname ist 'userModel', aber du importierst' userModels' – LEQADA

Antwort

1

Okay, ich sehe hier viel falschen Code. Lassen Sie uns einen Blick auf diesen Teil werfen:

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

Erstens kann ich sagen, dass dies keine korrekte Funktionsdeklaration ist. Und auch sehe ich, dass endlich die Sie anrufen callback(err , result); aber Rückruf ist aus dem Nichts kommt ... Also der vorherige Code könnte wie folgt aussehen:

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

kann nun auf diesem Teil des Codes einen Blick:

Grundsätzlich User.allUsers tun Sie nichts als die Funktion selbst übergeben. Wenn Sie Funktion aufrufen wollen, verwenden Sie (), also User.allUsers() ist der richtige Code, aber dieser Code ist asynchron und Sie werden nichts wieder bekommen ... Jetzt kommt der Teil, der callback zu verwenden. So kann der vorherige Code wie folgt aussehen:

Überprüfen Sie, ob der Code für Sie klar ist. Lass es mich wissen, wenn du irgendwelche Fragen hast.

+0

Danke, das hat richtig funktioniert und sorry für meine Frage, ich fange an von Sonntag zu lernen und meine Fehler sind blöd. Danke für Ihre Hilfe –

+0

Gern geschehen, ich hoffe, Sie werden ein besseres Verständnis von Javascript bekommen und neue Dinge lernen. Ich bin froh, dass dieser Code für dich funktioniert :) Viel Glück! – codtex