2017-07-19 7 views
0

私はnode.jsの初心者です。私の愚かな質問は申し訳ありません。nodejsを使用してモジュールからapp.jsにmysqlデータを返します

私は、ファイルを使って簡単に作業できるように、アプリを分けて整理したいと考えています。このような理由から、私はそこに私のMySQLデータベースを実行するモジュールを作成するが、私はmodule.Iに問題がapp.js

コンソールがundefinedを示しており、ブラウザは何も

を示していない私のメインの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 
     }); 
    }), 
}; 

私の問題は何ですか?

+0

'userModels'の中身は何ですか? – LEQADA

+0

@LEQADA申し訳ありませんが、実際には 'userModel.js'の間違いで' userModule.js'でした。私はコード –

+0

を編集しますが、まだ間違いがあるようです。ファイル名は 'userModel'ですが、' userModels'をインポートします。 – LEQADA

答えて

1

ここで間違ったコードがたくさんあります。

まず、これは正しい関数宣言ではないと言えます。そしてまた、私は最終的にあなたが呼び出している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

関連する問題