node.js - 如何使用 NodeJS 和 ExpressJS 使用 oracledb 形成并从查询中获取嵌套 JSON 对象

标签 node.js oracle express node-oracledb

我必须查询一组数据,我希望将这些数据嵌套起来以使其更有意义。使用ExpressJS配合oracledb框架查询数据时如下:

oracledb.getConnection(getConnectAttr, function(err,connection){
    if(err){
      res.set('content-type','application/json');
      res.status(500).send(JSON.stringify({
        status:500,
        message:"Error connection to DB",
        detailed_message:err.message
      }));
      return;
    }
      connection.execute("select * from REGISTRATION_MASTER", {}, {outFormat : oracledb.OBJECT
      },function(err, result){
        if(err){
          res.set('content-type','application/json');
      res.status(500).send(JSON.stringify({
        status:500,
        message:"Error connection the REGISTRATION",
        detailed_message:err.message
      }));
        }
        else{
          res.contentType('application/json').status(200);
          res.send(result.rows);
        }

        //Release the connection
        connection.release(
          function(err){
            if(err){
              console.error(err.message);
            }
            else{
              console.log("GET/comments : connection released")
            }
          });
      });

  });

我曾经查询过,查询结果会是这样的,

[   
    {
        "REG_ID": 1,
        "REG_TEXT": "User Name",
        "REG_VALUE": null,
        "REG_IS_REQUIRED": "true",
        "REG_TYPE": "text"
    },
    {
        "REG_ID": 2,
        "REG_TEXT": "Password",
        "REG_VALUE": null,
        "REG_IS_REQUIRED": "true",
        "REG_TYPE": "password"
    },
    {
        "REG_ID": 3,
        "REG_TEXT": "First Name",
        "REG_VALUE": null,
        "REG_IS_REQUIRED": "true",
        "REG_TYPE": "text"
    }   
]

我实际上需要通过查询形成一个json,输出应该像这样

{
  "REG_FIELDS": [{
    "REG_ID": 1, "REG_TEXT": "User Name", "REG_VALUE": "", "REG_IS_REQUIRED": "true",
    "REG_TYPE": "text"
  }, {
    "REG_ID": 2, "REG_TEXT": "Password", "REG_VALUE": "",
    "REG_IS_REQUIRED": "true", "REG_TYPE": "password"
  }, {
    "REG_ID": 3, "REG_TEXT": "First Name",
    "REG_VALUE": "", "REG_IS_REQUIRED": "true", "REG_TYPE": "text"
  }, ],
  "MAINHEADING": "CONSUMER SIGNUP",
  "SUBHEADER": "ACCOUNT - CONSUMER - SIGN UP",
  "IS_ACTIVE": "TRUE"
};

我正在寻找具有嵌套值的此类输出。我的要求是有更多的嵌套值。我正在寻找一个起点。

我也尝试过将 ORM 与 ExpressJS 结合使用,但在希望将 ExpressJS 与 Oracle 结合使用时,每个 ORM 都有自己的缺点。谢谢。

最佳答案

您可以执行多个查询,然后使用结果构建更复杂的数据结构并发送出去。看看这个:https://jsao.io/2015/07/relational-to-json-with-node-js/

另请注意,您不应将数据库错误发送给客户端。这可能会让您面临 SQL 注入(inject)的风险,因为它允许人们比他们应该了解的更多地了解您的数据库。向客户端发送一条通用消息并记录实际错误,以便您可以对其进行调试。

我很好奇,您尝试过哪些 ORM,有哪些缺点?

关于node.js - 如何使用 NodeJS 和 ExpressJS 使用 oracledb 形成并从查询中获取嵌套 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938869/

相关文章:

javascript - 如何访问函数中的命名参数?

node.js - Promise with q 框架和 Node.js 中的回调模式?

Node.js - 在 Express 中从 Swig 迁移到 Nunjucks

node.js - 如何在 npm 脚本中获取包版本和日期?

java - 在 h2 数据库中编写查询以转换日期格式

mysql - Solution Compatible Oracle and MySQL for LIMIT clause

node.js - TypeError : . findAll 不是函数

javascript - 翻转操作数时,将空数组与空对象相加会产生不同的结果

php - PHP中获取OCI-LOB的文本值

Node.js/Express 将所有内容重定向到 Angular 2 页面