2016-11-05 19 views
-1

Я пытаюсь получить данные из базы данных с помощью Node.js restify framework. Сервер работает нормально, но когда я посещаю http://localhost:8081/get я получаю эту ошибку:Почему сервер не имеет доступа к переменной подключения?

{ 
    "code": "InternalError", 
    "message": "connectionPool is not defined" 
} 

Вот мой код:

server.js

require('./app/core/routes.js'); 

routes.js

var restify=require('restify'); 
var fs=require('fs'); 
var controllers = {}; 
    controllers_path = process.cwd() + '/app/controllers'; 
fs.readdirSync(controllers_path).forEach(function (file) { 
    if (file.indexOf('.js') != -1) { 
     controllers[file.split('.')[0]] = require(controllers_path + '/' + file); 
    } 
}); 
var server=restify.createServer(); 
server.get('/get', controllers.article.printHello); 
server.listen(8081, function (err) { 
    if (err) 
     console.error(err); 
    else 
     console.log('App is ready at : ' + 8081); 
}); 

article.js

var something2=require('../core/connection.js'); 
something2.something(); 
exports.printHello= function(req, res, next){ 
    connectionPool.getConnection(function (err, connection) { 
     if (err) { 
      res.send({ 
       Error: err, 
       Message: "Can't connect Database." 
      }); 
     } else { 
      //queries 
      connection.query("SELECT * FROM book", function (err, rows, fields) { 
       res.send({ 
        json: rows 
       }); 
      }); 
     } 
    }); 
}; 

connection.js

var mysql = require('mysql'); 
exports.something = function() { 
    var connectionPool = mysql.createPool({ 
     host: 'localhost', 
     user: 'root', 
     password: '', 
     database: 'books' 
    }); 
} 
+0

Ошибка кажется правильной, 'connectionPool' не определен, он определен в другом файле, но это не очень помогает? – adeneo

+0

Не могли бы вы рассказать мне, как это исправить? –

+0

ли консоль говорит что-нибудь еще? – ZombieChowder

ответ

1

В файле connection.js, экспортируют бассейн

var mysql = require('mysql'); 
exports.connectionPool = function() { 
    return mysql.createPool({ 
     host: 'localhost', 
     user: 'root', 
     password: '', 
     database: 'books' 
    }); 
} 

Затем использовать его в article.js file

var conn = require('../core/connection.js'); 
var pool = conn.connectionPool(); 

exports.printHello = function(req, res, next){ 
    pool.getConnection(function (err, connection) { 
     if (err) { ... 
+0

Я попробую и скажу вам. –

+0

Вы уверены, что все в порядке? Я получаю ошибку 'conn.connectionPool() 'не является функцией. –

+0

Вы правы, это то, что возвращает 'createPool'. Обернул его в функцию, попробуйте сейчас. – adeneo

0

Вы должны return в something функции ваших connection.js «S вашей переменной connectionPool.

connection.js

var mysql = require('mysql'); 
exports.something = function() { 
    var connectionPool = mysql.createPool({ 
     host: 'localhost', 
     user: 'root', 
     password: '', 
     database: 'books' 
    }); 
return connectionPool; // notice here 
} 

article.js

var something2=require('../core/connection.js'); 
var connectionPool = something2.something(); //notice here 
exports.printHello= function(req, res, next){ 
    connectionPool.getConnection(function (err, connection) { 
     if (err) { 
      res.send({ 
       Error: err, 
       Message: "Can't connect Database." 
      }); 
     } else { 
      //queries 
      connection.query("SELECT * FROM book", function (err, rows, fields) { 
       res.send({ 
        json: rows 
       }); 
      }); 
     } 
    }); 
}; 
+0

@Vikas Kumar Я дал вам правильный ответ для начала – Mitchapp

+0

Большое спасибо. Я должен был так подумать. –

+0

Радует, что помогло :) – Mitchapp