在 node.js 输出中期望 JSON 输出不是 return

Expect JSON Output not return in node.js output

我有一个 table 叫 user_feedbacks,

对于类型,我们有 4 个默认值 - 1-建议,2-请求,3-损坏报告,4-事件

对于状态,我们有 3 个默认值 - 0-打开,1-进行中,2-关闭

我想在每种状态的每种类型下显示如下记录数 [需要输出],

{
  "status": "success",
  "code": 200,
  "data": {
    "1"(Type): {
      "0" (status): 20, (total)
      "1": 19,
      "2": 28
    },
    "2": {
      "0": 20,
      "1": 19,
      "2": 28
    },
    "3": {
      "0": 20,
      "1": 19,
      "2": 28
    },
    "4": {
      "0": 20,
      "1": 19,
      "2": 28
    }
  }
}

下面是我的代码,

在feedback.js

static async getFeedbackStats(opts) {
    assert.object(opts, 'opts')
    assert.func(opts.mysql_db, 'opts.mysql_db')

    const { mysql_db } = opts

    const result = mysql_db.select('type', 'status', mysql_db.raw('count(status)'))
        .from('user_feedbacks')
        .groupBy('status', 'type')

    return result
  }

在handler.js

const assert = require('assert-plus')
const Utils = require('../common/repos/feedbacks')
const Auth = require('../common/auth')
const Logger = require('../common/debug_logger')

async function handler(event, ctx, opts) {
    Logger.info('Feedback stats handler has been invoked: %j', event)

    const auth = await Auth.authenticate(event)

    if (!auth.success){
        return { status : 'failed', code : 401}
    }

    assert('params' in auth, 'auth.params')
    assert('auth_ctx' in auth, 'auth.auth_ctx')
    assert('user_id' in auth.auth_ctx, 'auth.auth_ctx.user_id')

    Logger.info('Feedback stats handler Auth.Params: %j', auth.params)

    const result = await Utils.getFeedbackStats(opts)

    return { status: 'success', code: 200, data: result }

}

module.exports = { handler }

上面的代码 return 下面的输出 [输出 i return],

    {
    "status":"success",
    "code":200,
    "data":[
        {
          "type":1,
          "status":0,
          "count(status)":2
        },
        {
          "type":2,
          "status":0,
          "count(status)":1
        },
        {
          "type":1,
          "status":1,
          "count(status)":1
        },
        {
          "type":1,
          "status":2,
          "count(status)":1
        }
          ]
}

任何人都可以帮助我获得上面提到的输出吗?

因此在处理程序中您更改:

const result = await Utils.getFeedbackStats(opts);

return { status: 'success', code: 200, data: result }

const result = await Utils.getFeedbackStats(opts);
const processedResult = processResult(result);

return { status: 'success', code: 200, data: processedResult }

现在processedResult获取数据和returns数据。这是一个非常简单的 只是打乱数据的算法。它比理解起来容易得多 async/await。

const processResult = ( { status, code, data } ) => {
    // This might be shorter to program
    const objResult = {
        "1": { "0": 0, "1": 0, "2": 0 },
        "2": { "0": 0, "1": 0, "2": 0 },
        "3": { "0": 0, "1": 0, "2": 0 },
        "4": { "0": 0, "1": 0, "2": 0 },
    };
    // augment default return
    return { 
      status, 
      code, 
      data: data.reduce((acc, { type, status, count }) => {
        return {...acc, [type]: {...acc[type], [status]: count } }; 
      }, objResult)
    };
};

// test 
const example = {
  "status":"success",
  "code":200,
  "data":[
      {
        "type":1,
        "status":0,
        "count":2
      },
      {
        "type":2,
        "status":0,
        "count":1
      },
      {
        "type":1,
        "status":1,
        "count":1
      },
      {
        "type":1,
        "status":2,
        "count":1
      }
   ]
};
console.log(processResult(example));