Node / MySQL连接但返回不可读的输出

时间:2018-02-06 16:15:32

标签: javascript mysql node.js

我正在尝试将我的Node应用程序连接到MySQL数据库,但是每当我读/写数据库时,我都会得到一个巨大的,不可读的输出,这是我无法理解的。我知道我实际上正在联系;当我更改用户/密码时,我得到了我的连接被拒绝的特定错误,并且我使用phpMyAdmin看到我的应用实际上是在表中插入行。对于我的SQL语法也是如此,如果我将其更改为错误,我会收到特定于SQL的错误。谁能告诉我为什么我会收到这些错误以及如何修复它?

数据库连接助手:

'use strict'
var mysql = require('mysql');

var connection = mysql.createConnection({
    host     : 'localhost',
    port     : 3306,
    user     : 'user',
    password : 'password',
    database : 'application'
});

connection.connect(function(err) {
  if ( err ) throw err
  console.log("Connected to database as " + connection.threadId)
});

module.exports = connection;

进行查询的模型:

'use strict';
let db = require('../db.js')

exports.userQuery = function() {
  return db.query("SELECT * FROM `users`")
}

我得到的输出:

Query {
  domain: null,
  _events: 
   { error: [Function],
     packet: [Function],
     end: [Function],
     timeout: [Function],
     'start-tls': [Function] },
  _eventsCount: 5,
  _maxListeners: undefined,
  _callback: undefined,
  _callSite: 
   Error
       at Protocol._enqueue (/home/john/Projects/application/node_modules/mysql/lib/protocol/Protocol.js:145:48)
       at Connection.query (/home/john/Projects/application/node_modules/mysql/lib/Connection.js:208:25)
       at Object.exports.userQuery (/home/john/Projects/application/models/users.js:5:13)
       at /home/john/Projects/application/controllers/signups.js:16:24
       at Layer.handle [as handle_request] (/home/john/Projects/application/node_modules/express/lib/router/layer.js:95:5)
       at next (/home/john/Projects/application/node_modules/express/lib/router/route.js:137:13)
       at Route.dispatch (/home/john/Projects/application/node_modules/express/lib/router/route.js:112:3)
       at Layer.handle [as handle_request] (/home/john/Projects/application/node_modules/express/lib/router/layer.js:95:5)
       at /home/john/Projects/application/node_modules/express/lib/router/index.js:281:22
       at Function.process_params (/home/john/Projects/application/node_modules/express/lib/router/index.js:335:12),
  _ended: false,
  _timeout: undefined,
  _idleNext: null,
  _idlePrev: null,
  _idleStart: null,
  _idleTimeout: -1,
  _repeat: null,
  sql: 'SELECT * FROM `users`',
  values: undefined,
  typeCast: true,
  nestTables: false,
  _resultSet: null,
  _results: [],
  _fields: [],
  _index: 0,
  _loadError: null,
  _connection: 
   Connection {
     domain: null,
     _events: {},
     _eventsCount: 0,
     _maxListeners: undefined,
     config: 
      ConnectionConfig {
        host: 'localhost',
        port: 3306,
        localAddress: undefined,
        socketPath: undefined,
        user: 'user',
        password: 'password',
        database: 'application',
        connectTimeout: 10000,
        insecureAuth: false,
        supportBigNumbers: false,
        bigNumberStrings: false,
        dateStrings: false,
        debug: undefined,
        trace: true,
        stringifyObjects: false,
        timezone: 'local',
        flags: '',
        queryFormat: undefined,
        pool: undefined,
        ssl: false,
        multipleStatements: false,
        typeCast: true,
        maxPacketSize: 0,
        charsetNumber: 33,
        clientFlags: 455631,
        protocol41: true },
     _socket: 
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [Object],
        _parent: null,
        _host: 'localhost',
        _readableState: [Object],
        readable: true,
        domain: null,
        _events: [Object],
        _eventsCount: 6,
        _maxListeners: undefined,
        _writableState: [Object],
        writable: true,
        allowHalfOpen: false,
        _bytesDispatched: 108,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        _idleTimeout: -1,
        _idleNext: null,
        _idlePrev: null,
        _idleStart: 255,
        _destroyed: false,
        read: [Function],
        _consuming: true,
        [Symbol(asyncId)]: 5,
        [Symbol(bytesRead)]: 0,
        [Symbol(asyncId)]: 9,
        [Symbol(triggerId)]: 1 },
     _protocol: 
      Protocol {
        domain: null,
        _events: [Object],
        _eventsCount: 6,
        _maxListeners: undefined,
        readable: true,
        writable: true,
        _config: [Object],
        _connection: [Circular],
        _callback: null,
        _fatalError: null,
        _quitSequence: null,
        _handshake: true,
        _handshaked: true,
        _ended: false,
        _destroyed: false,
        _queue: [Array],
        _handshakeInitializationPacket: [Object],
        _parser: [Object] },
     _connectCalled: true,
     state: 'authenticated',
     threadId: 90 } }

1 个答案:

答案 0 :(得分:1)

如果您查看documentation,您会看到query是一个支持回调的异步功能。它不返回结果,而是看起来像returns connection details

使用回调:

exports.userQuery = function(callback) {
  db.query("SELECT * FROM `users`", function (err, results, fields) {
    if (err) throw err;
    callback(results);
  })
}

userQuery(function (results) {
  console.log('I got results back:', results);
});

使用承诺:

如果您更愿意使用承诺,可以使用:

exports.userQuery = function() {
  return new Promise(function (resolve, reject) {
    db.query("SELECT * FROM `users`", function (err, results, fields) {
      if (err) return reject(err);
      return resolve(results);
    });
  });
};

userQuery().then(function(results) {
  console.log('I got results back:', results);
});
相关问题