2017-02-27 60 views
0

我正在一個明確的服務器上連接到數據庫中的Node.js和我有我從已經爲用戶建立一個路由文件訪問我的數據庫的麻煩。當我嘗試提出獲取請求時,我會將其作爲錯誤接收。從路線

「代碼」: 「ER_NO_DB_ERROR」, 「錯誤號」:1046, 「SQLSTATE」: 「3D000」, 「指數」:0

我一直在試圖尋找解決方案在線,但最的答案建議需要我已經做的db.js文件。我有一種感覺,我需要傳遞我在app.js中創建的連接,但我不知道如何執行此操作。我的文件的相關部分如下。數據庫登錄信息已被編輯,我確實在app.js中獲得了成功的連接。我相當新,所以任何幫助將不勝感激,特別是如果有更好的方式來使用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); 

型號/ 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) 
     }) 
    } 

路線/ 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

//這被認爲是主要來自我在網上找到的教程

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

回答

0

任一電源中的createConnection有效的數據庫...

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

和/或與查詢數據庫的名稱限定表名:

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

是什麼樣子當前代碼正在發生的事情,建立一個連接到MySQL服務器。但沒有USE mydatabase聲明已執行。當執行SQL語句SELECT ... FROM users,MySQL不知道哪個數據庫users應該參考一下。 (該表可在包含名爲users表或視圖多個數據庫存在。)

而這正是導致1046號數據庫中選擇錯誤。

+0

感謝您的迴應,我添加了這個,現在我得到一個「代碼」:「ER_DBACCESS_DENIED_ERROR」, 「errno」:1044,這是進展。我會看多進,爲什麼我不能夠正確地從這裏訪問我的表 –