【问题标题】:Nodejs, Express mysql always returning ER_BAD_DB_ERRORNodejs,Express mysql总是返回ER_BAD_DB_ERROR
【发布时间】:2020-06-13 08:48:31
【问题描述】:

我正在使用 Node.js 和 Express 开发一个简单的 Web 应用程序。我必须使用 mysql 模块查询数据库。每次我尝试查询数据库时都会显示此错误:

  code: 'ER_BAD_DB_ERROR',
  errno: 1049,
  sqlMessage: "Unknown database 'moneydb'",
  sqlState: '42000',
  fatal: true

我试图创建一个新的数据库,但我总是遇到同样的错误。旺普正在运行。凭据是正确的,因为如果我导航到 localhost/phpmyadmin 我使用 root 作为用户名登录并且没有密码。

我在这里贴出相关代码:

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

index.js

var express = require('express');
var router = express.Router();
var mysql = require('mysql');

// connection setup
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'moneydb'
});


// connect to database
connection.connect((err) => {
    if (err) {
        console.log('Not connected to database');
        throw err;
    } else {
        console.log('Connected to database');
    }
});

// make connection global
global.db = connection;

/*
*  Every page we declare here will be under the index path
*  localhost:3000/ will render home page
*  localhost:3000/disheslist will be under the home page path and will render the disheslist
* */

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', {title: 'Express'});
});

/*GET dish list. */
/*render contains views(pug files)*/
router.get('/dishes', function (req, res, next) {
    let query = "SELECT * FROM `dish` ORDER BY id ASC";

    // execute query
    db.query(query, (err, result) => {
        if (err) {
            // we should redirect to an error page maybe
            res.redirect('/');
        }

        if (result) {
            res.render('dishes', {tableData: result});
        } else {
            res.send("Error");
        }
    });
});

module.exports = router;

dishes.pug

doctype html
html
    head
        title = title
        link(rel='stylesheet', href='/stylesheets/style.css')
    body
    table
        thead
            tr
            th id
            th name
            tbody

怎么了?谢谢!

【问题讨论】:

  • 你的服务器说没有同名的数据库,所以检查一下,最后是错字
  • 没有错字。我创建了另一个数据库,将数据库中的名称复制并粘贴到代码中,我也遇到了同样的错误,我认为是其他问题,但我不知道是什么。
  • 启用 mysql 的日志,看看有什么到达服务器还检查错误日志,如果系统日志中有事件则记录
  • 您是指我创建数据库的服务器上的 mysql 或 mysql Nodejs 模块?

标签: mysql node.js express web-applications


【解决方案1】:

我从对象中评论/取出了数据库:'<DB NAME>'

const connection = mysql.createConnection({
  user : 'root',
  host : '127.0.0.1',
  //database : '<db name>',
  port: '3306',
  password : '<your password>'
});

【讨论】:

  • 请为您的答案添加解释
【解决方案2】:

问题解决了。

我检查了 wamp 上的 MySql 使用了哪个端口,我找到了 3308 端口。在连接 index.js 之前,我将端口添加到配置中,我得到了它。代码在这里更新:

index.js

var express = require('express');
var router = express.Router();
var mysql = require('mysql');

// connection setup
const connection = mysql.createConnection({
    host: 'localhost',
    port: 3308,
    user: 'root',
    password: '',
    database: 'dbname'
});


// connect to database
connection.connect((err) => {
    if (err) {
        console.log('Not connected to database');
        throw err;
    } else {
        console.log('Connected to database');
    }
});

// make connection global
global.db = connection;

/*
*  Every page we declare here will be under the index path
*  localhost:3000/ will render home page
*  localhost:3000/disheslist will be under the home page path and will render the disheslist
* */

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', {title: 'Express'});
});

/*GET dish list. */
/*render contains views(pug files)*/
router.get('/dishes', function (req, res, next) {
    let query = "SELECT * FROM `dish` ORDER BY id ASC";

    // execute query
    db.query(query, (err, result) => {
        if (err) {
            // we should redirect to an error page maybe
            res.redirect('/');
        }

        if (result) {
            res.render('dishes', {tableData: result});
        } else {
            res.send("Error");
        }
    });
});

module.exports = router;

谢谢大家!

【讨论】:

    【解决方案3】:

    看起来用户没有数据库服务器的权限。查看错误消息似乎请求能够到达服务器,但是由于权限不足,服务器返回错误。

    【讨论】:

    • 什么样的特权?我应该在哪里检查?
    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 2014-03-27
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多