Knex select查询后如何使用数据

The*_*Guy 4 node.js knex.js

我在使用 knex select 从表中检索数据时遇到了一些麻烦。

我想做这样的事情

function getUserData(userId){
    let user = knex.select('xp','money','rolls','twenty').from('users').where('user_id', userId);
   return user;
}


user = getUserData(userId);
user.xp;   // do something with this value
Run Code Online (Sandbox Code Playgroud)

但这会输出以下内容(如果我console.log它),但不是选择查询中请求的信息,除非我不确定如何检索它:

Builder {
  client:
   Client_MySQL {
 config: { client: 'mysql', connection: [Object] },
 connectionSettings:
  { host: '127.0.0.1',
    user: 'XXXXXXXXXX',
    password: 'XXXXXXXXXX',
    database: 'XXXXXXXXXX' },
 driver:
  { createConnection: [Function: createConnection],
    createPool: [Function: createPool],
    createPoolCluster: [Function: createPoolCluster],
    createQuery: [Function: createQuery],
    escape: [Function: escape],
    escapeId: [Function: escapeId],
    format: [Function: format],
    raw: [Function: raw] },
 pool:
  Pool {
    creator: [Function: create],
    destroyer: [Function: destroy],
    validate: [Function: validate],
    log: [Function],
    acquireTimeoutMillis: 60000,
    createTimeoutMillis: 30000,
    idleTimeoutMillis: 30000,
    reapIntervalMillis: 1000,
    createRetryIntervalMillis: 200,
    propagateCreateError: true,
    min: 2,
    max: 10,
    used: [],
    free: [],
    pendingCreates: [],
    pendingAcquires: [],
    destroyed: false,
    interval: null },
 valueForUndefined:
  Raw {
    client: [Circular],
    sql: 'DEFAULT',
    bindings: undefined,
    _wrappedBefore: undefined,
    _wrappedAfter: undefined,
    _debug: undefined },
 _events:
  { start: [Function],
    query: [Function],
    'query-error': [Function],
    'query-response': [Function] },
 _eventsCount: 4,
 makeKnex: [Function: makeKnex] },
  and: [Circular],
  _single: { table: 'users', only: false },
  _statements:
   [ { grouping: 'columns', value: [Array] },
     { grouping: 'where',
       type: 'whereBasic',
       column: 'user_id',
       operator: '=',
       value: '341007826375802900',
   not: false,
   bool: 'and' } ],
  _method: 'select',
  _debug: undefined,
  _joinFlag: 'inner',
  _boolFlag: 'and',
  _notFlag: false }
Run Code Online (Sandbox Code Playgroud)

我会在这里多写一些文字,因为它要求我这样做,因为它主要是代码。我希望这已经足够了。

Fac*_*teo 5

查询异步运行,因此您需要显式等待它完成。一种方法是使用 Promise:

knex.select('xp','money','rolls','twenty').from('users').where('user_id', userId)
  .then(data => console.log(data));
Run Code Online (Sandbox Code Playgroud)

还要确保与数据库的连接已建立。