2016-05-07 7 views
0

app.jsとインポートされたファイルの間でオブジェクトを共有できません。異なるファイル間でオブジェクトを共有するnodeJs

app.js

'use strict'; 

module.exports = require('./lib/express'); 

var express = require('express'); 
var session = require('express-session'); 
var bodyParser = require('body-parser'); 
var sql = require('./lib/sqlRequete'); 
var app = express(); 

// Init database 
var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'master2i' 
}); 
connection.connect(); 

app.post('/ajaxRequete', urlencodedParser, function(req,res){ 
    sql.formerSql(req.body); 
}); 

app.listen(port,function(){ 
    console.log("Le serveur est lancé et écoute sur le port "+port); 
}); 

sqlRequete.jsapp.jsから変数とオブジェクトにアクセスすることができない

'use strict'; 

var exports = module.exports = {}; 

exports.formerSql=function(req){ 

    var SQL; 

    switch(req.action){ 
    case 'login': 
     SQL = "SELECT * FROM users WHERE pseudo ='" + req.pseudo + "' AND pass = '" + req.psw + "'"; 
     this.executeSql(SQL,'SELECT'); 
     break; 
    } 
} 

exports.executeSql=function(requete, type){ 

    switch(type){ 

    case 'SELECT': 
     connection.query(requete, function(err,rows,fields){ 
     if (err){ 
      throw err; 
     }else{ 
      console.log('The solution is: ',rows); 
     } 
     }); 
     break; 
    } 
} 

sqlRequete.js。 例として、私はアクセスできませんconnection 解決策は何ですか?コードをどのように構造化すればよいですか?

+0

を渡します任意のオブジェクト? –

+0

この場合、接続は変更されないため、これが機能します。しかし、app.jsで値が変化する変数やオブジェクトがあれば、それらはsqlRequete.jsで非推奨になりますか? – AnonBird

答えて

1

あなたは、以下の方法によりapp.jsからsqlRequete.jsファイルにオブジェクトを渡すことができます。

sqlRequete.js

module.exports = function(connection){ 
    function formerSql(req){ 
    var SQL; 
    switch(req.action){ 
     case 'login': 
      SQL = "SELECT * FROM users WHERE pseudo ='" + req.pseudo + "' AND pass = '" + req.psw + "'"; 
      this.executeSql(SQL,'SELECT'); 
      break; 
    } 
    } 

    function executeSql(requete, type){ 
    switch(type){ 
     case 'SELECT': 
      connection.query(requete, function(err,rows,fields){ 
      if (err){ 
      throw err; 
      }else{ 
      console.log('The solution is: ',rows); 
      } 
     }); 
     break; 
    } 
    } 
    return { 
     formerSql : formerSql, 
     executeSql : executeSql 
    } 
} 

そしてapp.jsでは、約は `sqlRequete.js`モジュールとパスで` init`機能を追加するどのような接続オブジェクト

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'master2i' 
}); 
connection.connect(); 
var sql = require('./lib/sqlRequete')(connection); 
+0

ありがとうございます。要求オブジェクトの呼び出し時に接続オブジェクトは常に最新の状態になるか保存されますか? – AnonBird

+0

誤字脱字して申し訳ありません。私はこのブラウザでコードを書いて、誤って 'function'キーワードをスキップしました。 –

+0

はい、そうすべきです。それを試してみるべきです。 –

2

通常、3番目のファイルを使用します(ケースシナリオでは)。

このような結果のフォルダ構造:

- index.js 
- lib/ 
|__ orm.js 
|__ app.js 
|__ sqlRequete.js 
orm.jsファイルはインスタンスを返すの接続を作成している

var mysql  = require('mysql'); 
module.exports = function() { 
    var connection = mysql.createConnection({ 
     host  : 'localhost', 
     user  : 'root', 
     password : '', 
     database : 'master2i' 
    }); 
    connection.connect(); 

    // IMPORTANT 
    // here is where you're sharing variables between files! 
    return connection; 
} 

しかし、特にご例えば、私は思います単純にSQLインスタンスの初期化をsqlRequete.jsファイルに移動します。

exports.start = function() { 
    // Init database 
    var mysql  = require('mysql'); 
    var connection = mysql.createConnection({ 
     host  : 'localhost', 
     user  : 'root', 
     password : '', 
     database : 'master2i' 
    }); 
    connection.connect(); 
} 

そしてapp.jsにそれを要求:

var app = express(); 

sql.start(); 
関連する問題