我使用 mongodb 将应用程序错误日志存储为 json 文档。我希望能够将错误日志格式化为 HTML,而不是将纯 json 返回到浏览器。日志是完全无模式的 - 它们可以随时更改,因此尝试执行此操作(在 Jade 中)是没有用的:
- var items = jsonResults
- each item in items
h3 Server alias: #{item.ServerAlias}
p UUID: #{item.UUID}
p Stack trace: #{item.StackTrace}
h3 Session: #{item.Session}
p URL token: #{item.Session.UrlToken}
p Session messages: #{item.Session.SessionMessages}
因为我事先不知道 JSON 结构中实际包含什么。我想要的肯定是可能的,但是?我读到的所有内容都表明该架构不是由数据库强制执行的,但您的视图代码无论如何都会概述您的架构 - 但我们有数百个可能的字段可以随时删除或添加,因此管理视图这种方式是相当难以管理的。
我缺少什么?我对这项技术做出了错误的假设吗?这样做的方式是错误的吗?
编辑了以下评论的额外信息:
json 文档看起来像这样
{
"ServerAlias":"GBIZ-WEB",
"Session":{
"urltoken":"CFID=10989&CFTOKEN=f07fe950-53926E3B-F33A-093D-3FCEFB&jsessionid=84303d29a229d1",
"captcha":{
},
"sessionmessages":{
},
"sessionid":"84197a667053f63433672873j377e7d379101"
},
"UUID":"53934LBB-DB8F-79T6-C03937JD84HB864A338",
"Template":"\/home\/vagrant\/dev\/websites\/g-bis\/code\/webroot\/page\/home\/home.cfm, line 3",
"Error":{
"GeneratedContent":"",
"Mailto":"",
"RootCause":{
"Message":"Unknown tag: cfincflude.",
"tagName":"cfincflude",
"TagContext":[
{
"RAW_TRACE":"\tat cfhome2ecfm1296628853.runPage(\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/home\/home.cfm:3)",
"ID":"CFINCLUDE",
"TEMPLATE":"\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/home\/home.cfm",
"LINE":3,
"TYPE":"CFML",
"COLUMN":0
},
{
"RAW_TRACE":"\tat cfdisplay2ecfm1093821753.runPage(\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/display.cfm:6)",
"ID":"CFINCLUDE",
"TEMPLATE":"\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/display.cfm",
"LINE":6,
"TYPE":"CFML",
"COLUMN":0
}
]
}
}
...等等,但可能会根据生成日志的单个项目配置为触发的内容而发生变化。
我想要最终得到的是一个格式化的 HTML 页面,其中包含下面列出的每个父级和子级的标题,直接迭代数据结构。上面的 Jade 示例实际上是我们需要输出的内容,但没有在视图中对其进行硬编码。
迈克在评论中对问题的分析是,从一堆没有太多共同点的集合中创建一个类似表格的结构,这是非常正确的。数据是相关的,但仅限于单个文档中 - 因此将模式硬编码到任何内容中几乎是不可能的,因为它要求您首先知道数据结构是什么样的。