2017-02-27 1 views
0

Je travaille sur un serveur express et j'ai des difficultés à accéder à ma base de données à partir d'un fichier de routage que j'ai configuré pour les utilisateurs. Lorsque j'essaie de faire une demande d'obtention je reçois cela comme une erreur.Connexion à la base de données dans Node.js à partir des routes

"code": "ER_NO_DB_ERROR", "errno": 1046, "SqlState": "index" "3D000", : 0

Je suis en train de chercher une solution en ligne, mais la plupart des réponses suggèrent de demander le fichier db.js partout où je le fais déjà. J'ai le sentiment que j'ai besoin de passer la connexion que j'ai faite dans app.js mais je ne sais pas trop comment faire. Les parties pertinentes de mes fichiers sont ci-dessous. Les informations de connexion à la base de données ont été rédigées, j'obtiens une connexion réussie dans app.js. Je suis relativement nouveau à ce sujet, donc toute aide serait appréciée, en particulier s'il y a une meilleure façon d'utiliser le pool implémenté dans db.js.

app.js

 var express = require('express'); 
     var path = require('path'); 
     var favicon = require('serve-favicon'); 
     var logger = require('morgan'); 
     var cookieParser = require('cookie-parser'); 
     var bodyParser = require('body-parser'); 

     var index = require('./routes/index'); 
     var users = require('./routes/users'); 
     var mysql = require('mysql') 
     var app = express(); 
     var users = require('./routes/users'); 
     var media = require('./routes/media'); 
     var tv = require('./routes/tv'); 
     var movies = require('./routes/movies'); 
     var db = require('./db.js') 

     var connection = mysql.createConnection({ 
     port: '3306', 
     host: '*********************', 
     user: '********', 
     password: '******' 
     }) 

     db.connect(function(err) { 
     if (err) { 
      console.log('Unable to connect to MySQL.') 
      process.exit(1) 
     } else { 
      console.log('Successfully connected') 
      } 
     }) 

     app.use('/api', users); 

modèles/user.js

var db = require('../db.js'); 
    var passwordHash = require('password-hash'); 


    exports.getAll = function(done) { 
     db.get().query('SELECT * FROM users', function (err, rows) { 
     if (err) return done(err) 
     done(null, rows) 
     }) 
    } 

routes/users.js

var express = require('express'); 
    var router = express.Router() 
    var user = require('../models/user'); 
    var db = require('../db.js'); 

    //this doesn't prInt anything currently. This is prompting me to believe I   somehow   
    //need to pass a connection object or am using the pool properly. 
    console.log(db.get()); 

    router.route('/users').get(function(req, res) { 
     user.getAll(function(err, users) { 
     if (err) { 
      return res.send(err); 
     } 
     res.json(users); 
     }); 
    }); 

db.js

// ceci est pris surtout à partir d'un tutoriel que j'ai trouvé en ligne

var mysql = require('mysql') 
     , async = require('async') 

    var PRODUCTION_DB = 'app_prod_database' 
     , TEST_DB = 'app_test_database' 

    exports.MODE_TEST = 'mode_test' 
    exports.MODE_PRODUCTION = 'mode_production' 

    var state = { 
     pool: null, 
     //mode: null, 
    } 

    exports.connect = function(done) { 
     state.pool = mysql.createPool({ 
     port: '3306', 
     host: '***************', 
     user: '*********', 
     password: '*******' 
     //database: mode === exports.MODE_PRODUCTION ? PRODUCTION_DB : TEST_DB 
     }) 

     //state.mode = mode 
     done() 
    } 

    exports.get = function() { 
     return state.pool 
    } 

    exports.fixtures = function(data) { 
     var pool = state.pool 
     if (!pool) return done(new Error('Missing database connection.')) 

     var names = Object.keys(data.tables) 
     async.each(names, function(name, cb) { 
     async.each(data.tables[name], function(row, cb) { 
      var keys = Object.keys(row) 
      , values = keys.map(function(key) { return "'" + row[key] + "'" }) 

      pool.query('INSERT INTO ' + name + ' (' + keys.join(',') + ') VALUES   (' + values.join(',') + ')', cb) 
     }, cb) 
     }, done) 
    } 

    exports.drop = function(tables, done) { 
     var pool = state.pool 
     if (!pool) return done(new Error('Missing database connection.')) 

     async.each(tables, function(name, cb) { 
     pool.query('DELETE * FROM ' + name, cb) 
     }, done) 
    } 

Répondre

0

Soit une base de données valide fournir dans le createConnection ...

var connection = mysql.createConnection({ 
    port: '3306', 
    host: '*********************', 
    user: '********', 
    password: '******', 
    database: 'mydatabase' 

Et/ou, qualifier le nom de la table avec le nom de la base de données dans la requête:

db.get().query('SELECT * FROM mydatabase.users', 
           ^^^^^^^^^^^ 

À quoi ça ressemble dans le code actuel, une connexion est établie avec le serveur MySQL. Mais aucune instruction USE mydatabase n'a été exécutée. Lorsque l'instruction SQL SELECT ... FROM users est exécutée, MySQL ne sait pas quelle base de données le users doit référencer. (Cette table peut exister dans plusieurs bases de données contenant une table ou une vue nommée users.)

Cause de l'erreur 1046 Aucune base de données sélectionnée.

+0

Merci pour la réponse, j'ai ajouté cela et je reçois maintenant un "code": "ER_DBACCESS_DENIED_ERROR", "errno": 1044, Qui est le progrès. Je vais regarder plus en détail pourquoi je ne suis pas en mesure d'accéder correctement à mes tables à partir d'ici –