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

标签 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 } }

最佳答案

如果你看一下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);
});

使用 promise :

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

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

关于javascript - Node/MySQL 连接但返回不可读的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647340/

相关文章:

javascript - 使用带有 socket.io 的房间

javascript - 我不明白为什么我的快速路由在发送后遇到 'can' t set headers'

javascript - JS 添加新字段后 cakephp 表单未正确提交

javascript - Stripe 订阅 - 如何格式化 cancel_at 日期

mysql - Mysql group_concat 对连接列进行排序正确,但对其余列排序不正确?

mysql - 从对话中选择最后一条消息(两个用户之间的一条消息)

java - 无法创建 PoolableConnectionFactory(用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES))

git - 如何使用 NPM 处理 git 项目中的 Node.js 依赖项?

javascript - 滚动到某个 div 时更改 Logo

node.js - 如何从 NodeJS 服务器下载 React 中的文件? (文件损坏)