在 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));
我有一个 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));