我正在使用 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 示例实际上是我们需要输出的内容,但没有在视图中对其进行硬编码。
Mike 在评论中对问题的分析是,从一堆没有太多共同点的集合中创建一个类似表格的结构,这一点非常成功。数据是相关的,但仅在单个文档中 - 因此将模式硬编码到任何内容中几乎是不可能的,因为它需要您首先知道数据结构的样子。