我正在使用快速服务器,并且无法从我为用户设置的路径文件访问我的数据库。当我尝试发出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)
}
答案 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无数据库选择错误的原因。