从路由连接到Node.js中的数据库

时间:2017-02-27 22:41:58

标签: mysql node.js database express routes

我正在使用快速服务器,并且无法从我为用户设置的路径文件访问我的数据库。当我尝试发出get请求时,我收到这个错误。

“code”:“ER_NO_DB_ERROR”,   “errno”:1046,   “sqlState”:“3D000”,   “index”: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)
    }

1 个答案:

答案 0 :(得分: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无数据库选择错误的原因。