Javascript 在node.js输出中不返回JSON输出
我有一个叫做用户反馈的表 对于类型,我们有4个默认值-1-建议、2-请求、3-损坏报告、4-事件 对于状态,我们有3个默认值-0-打开、1-进行中、2-关闭 我想在每种状态的每种类型下显示如下记录计数[所需输出]Javascript 在node.js输出中不返回JSON输出,javascript,java,node.js,json,knex.js,Javascript,Java,Node.js,Json,Knex.js,我有一个叫做用户反馈的表 对于类型,我们有4个默认值-1-建议、2-请求、3-损坏报告、4-事件 对于状态,我们有3个默认值-0-打开、1-进行中、2-关闭 我想在每种状态的每种类型下显示如下记录计数[所需输出] { "status": "success", "code": 200, "data": { "1"(Type): { "0" (status): 20, (total) "1": 19, "2": 28 }, "
{
"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
}
}
}
{
"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
}
]
}
下面是我的代码
在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
}
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 }
handler.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
}
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 }
上述代码返回低于输出[输出i返回]
{
"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
}
}
}
{
"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
}
]
}
任何人都可以帮助我获得我提到的上述输出?因此在handler中您可以更改:
const result = await Utils.getFeedbackStats(opts);
return { status: 'success', code: 200, data: result }
到
现在processedResult
获取数据并返回数据。这是一个非常简单的问题
一种只对数据进行洗牌的算法。理解比理解容易得多
异步/等待
constprocessresult=({状态、代码、数据})=>{
//这可能比编程时间短
常量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 },
};
//增加默认回报
返回{
地位
代码,
data:data.reduce((acc,{type,status,count})=>{
返回{…acc[type]:{…acc[type],[status]:count};
},objResult)
};
};
//试验
常量示例={
“状态”:“成功”,
“代码”:200,
“数据”:[
{
“类型”:1,
“状态”:0,
“计数”:2
},
{
“类型”:2,
“状态”:0,
“计数”:1
},
{
“类型”:1,
“地位”:1,
“计数”:1
},
{
“类型”:1,
“地位”:2,
“计数”:1
}
]
};
log(processResult(示例))
不应该Utils.getFeedbackStats
返回承诺吗?另外,建议将异步方法包装在try catch
块中。@EmmanuelGabriel Utils.getFeedbackStats返回我前面提到的输出,但我不确定如何获得我在顶部提到的所需输出。我的意思是,您应该显式返回一个承诺,如return awit mysql\u db.select('type','status',mysql\u db.raw('count)(status);(status);(user_feedbacks);(user_feedbacks);(user_feedbacks);(user_feedbacks);.groupBy('status','type')
另外,你能给我显示调用getUtils.getFeedbackStats的确切输出吗?@EmmanuelGabriel这是我得到的输出-{“status”:“success”,“code”:200,“data”:[{“type”:1,“status”:0,“count(status)”:2},{“type”:1,“status”:1,“count(status)”,{“type”:1,“状态”:2,“计数(状态)”:1},{“类型”:2,“状态”:0,“计数(状态)”:1}]}@EmmanuelGabriel这是我想要的格式—{“状态”:“成功”,“代码”:200,“数据”:{“1”:{“0”:“0”:20,“1”:19,“2”:28},{“0”:20,“1”:19,“2”:28},“3”:{“0”:20,“1”:19,“2”: 28 }, "4": { "0": 20, "1": 19, "2": 28 } } }