如何使用 node.js / mongodb 在 HTML 中显示任意、无模式数据

2024-05-12

我使用 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 示例实际上是我们需要输出的内容,但没有在视图中对其进行硬编码。

迈克在评论中对问题的分析是,从一堆没有太多共同点的集合中创建一个类似表格的结构,这是非常正确的。数据是相关的,但仅限于单个文档中 - 因此将模式硬编码到任何内容中几乎是不可能的,因为它要求您首先知道数据结构是什么样的。


基本思想是 @Gates VP 所描述的。我用下划线.js http://underscorejs.org迭代数组/对象。

function formatLog(obj){
  var log = "";
  _.each(obj, function(val, key){ 
    if(typeof(val) === "object" || typeof(val) === "array"){
      // if we have a new list
      log += "<ul>";
      log += formatLog(val);
      log += "</ul>";
    }
    else{
      // if we are at an endpoint
      log += "<li>";
      log += (key + ": " + val);
      log += "</li>";
    }
  });
  return log;
}

如果你打电话formatLog()根据您提供的示例数据,它会返回

  • 服务器别名:GBIZ-WEB
    • urltoken: CFID=10989&CFTOKEN;=f07fe950-53926E3B-F33A-093D-3FCEFB&jsessionid;=84303d29a229d1
        • 会话ID:84197a667053f63433672873j377e7d379101
      • UUID:53934LBB-DB8F-79T6-C03937JD84HB864A338
      • 模板:/home/vagrant/dev/websites/g-bis/code/webroot/page/home/home.cfm,第 3 行
        • 生成内容:
        • Mailto:
          • 消息:未知标签:cfincflude。
          • 标签名称:cfincflude
              • RAW_TRACE:位于 cfhome2ecfm1296628853.runPage(/home/vagrant/dev/websites/nig-bis/code/webroot/page/home/home.cfm:3)
              • ID:CF包括
              • 模板:/home/vagrant/dev/websites/nig-bis/code/webroot/page/home/home.cfm
              • LINE: 3
              • 类型:CFML
              • 列:0
              • RAW_TRACE:位于 cfdisplay2ecfm1093821753.runPage(/home/vagrant/dev/websites/nig-bis/code/webroot/page/display.cfm:6)
              • ID:CF包括
              • 模板:/home/vagrant/dev/websites/nig-bis/code/webroot/page/display.cfm
              • LINE: 6
              • 类型:CFML
              • 列:0

      如何格式化它取决于你。

      本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

      如何使用 node.js / mongodb 在 HTML 中显示任意、无模式数据 的相关文章

      • Nodejs 在路由器页面中包含 socket.io

        我有一个 Express Node 应用程序 并且我试图通过不在 app js 中包含所有 socket io 内容来保持代码整洁 我不知道解决这个问题的最佳方法 这是我最初的想法 感觉不是最干净的 app js var express r
      • jest 无限期挂起,不运行任何测试

        每次我运行 jest 时它都不会运行任何东西 我已经让计数器任意升高 我用 no cache 运行 jest jest debug 输出如下 configs automock false browser false cache true c
      • 如何与使用 child_process.spawn 创建的新创建的服务器交互

        我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
      • 模块转换为 Typescript 后没有默认导出

        我已将 JavaScript 代码转换为 Typescript 并收到错误 模块没有默认导出 我尝试过使用花括号导入并使用 module exports 导出 但它们都不起作用 contactController ts const cont
      • 用于高效大规模图遍历的数据库

        我有一个大型二分有向图数据集 约 2000 万个元素 在当前的使用中 我运行的遍历算法每次运行约 500 000 个节点 这些算法有效 但历史上运行的是从文本文件加载到内存的数据 文本文件似乎是一个不好的方法 所以我将数据作为邻接列表传输到
      • 在 TypeScript 中创建 swagger Web 服务的正确方法是什么

        我是用 TypeScript 编写的项目的一部分 我正在尝试添加与 Swagger 兼容的 TypeScript Web 服务器 考虑到易于维护性 实现它的最基本策略是什么 对于 Typescript 我注意到存在 Typson 库 用于从
      • PyMongo 中的 MapReduce

        我的蒙戈收藏 Impressions具有以下格式的文档 uid 10 impressions pos 6 id 123 service furniture pos 0 id 128 service electronics pos
      • CORS 问题。 Flask <-> AngularJS

        使用 angularjs 客户端应用程序和提供 api 的 Flask 应用程序启动一个新项目 我使用 mongodb 作为数据库 我必须立即排除 jsonp 因为我需要能够跨不同端口进行 POST 因此 我们为 Angular 应用程序设
      • 缩短node.js和mongoose中的ObjectId

        我的网址目前如下所示 http www sitename com watch companyId 507f1f77bcf86cd799439011 employeeId 507f191e810c19729de860ea someOtherI
      • Google Analytics 服务器端授权获取页面浏览计数分析数据并将其显示在首页上的随机访问者

        如何显示您网页的访问者计数 而无需像 Google Analytics 那样登录或进行身份验证 我正在尝试实施 Google Analytics 服务器端授权来获取页面浏览计数分析数据并将其显示给首页上的随机访问者 我阅读了他们的文档并找到
      • 跳过测试文件 Jest 中的一项测试

        我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
      • Node.js 中的 SetTimeout 问题

        我有以下代码 它在 Chrome V8 下运行良好 但在节点内失败 var id id setTimeout TimeoutHandler 10 console log SET function TimeoutHandler clearTi
      • 无法从亚马逊Windows实例的公共IP访问node.js服务器

        我正在 Windows 服务器的亚马逊微实例上运行 Node js 服务器 我无法使用亚马逊实例的公共IP访问node js服务器 我可以使用 localhost 12345 从实例访问 node js 服务器 但无法使用实例的公共 IP
      • MongoDb Spring 在嵌套对象中查找

        我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
      • 使用 package.json 一起运行节点服务器和 webpack

        我通过学习此视频完成了待办事项应用程序 超级 MEAN 堆栈教程 Angular Node Express Webpack MongoDB SASS Babel ES6 Bootstrap https www youtube com wat
      • 强大的上传不起作用:“文件”未定义,没有错误

        我正在尝试使用 formidable 上传文件 按照中的教程进行操作节点入门书 http www nodebeginner org 按照这段代码 我有一个服务器模块 它通过requestrequestHandler 模块的对象 主页加载带有
      • Gulp: /usr/local/bin/gulp: 没有这样的文件或目录

        每当我运行 gulp 时 都会收到以下错误 usr local bin gulp 没有这样的文件或目录 我已经关注了 SO 上几个相关问题的答案 但没有一个能解决我的问题 我已经使用 gulp 几个月了 没有任何问题 但不知何故搞砸了 我已
      • 从 HTML 表单发送数据到 Node.js 服务器

        我正在学习 Node js 我的服务器中有这个 var http require http var url require url http createServer function request response response w
      • 如何使用nodeJS SFTP客户端列出所有子目录?

        有趣的节点 JS ssh2 sftp client 我想列出给定路径中的所有目录及其子目录 let sftp new ssh2SftpClient console log sftp sftp connect host xx xxx xxx
      • NodeJS 中的缩进多行日志记录

        我要打印JSON stringify d 反对控制台 将上下文作为 Mocha 测试套件输出的一部分 当测试缩进时 我希望对象日志行向右缩进足够远 例如 3 4 个制表符空格 以便它们可以识别地位于右侧describe group 我怎样才

      随机推荐