环回:发送额外的键/值对作为回应

时间:2018-07-14 12:43:06

标签: loopbackjs

我已经搜索了文档,但是找不到如何向json响应中添加其他数据。

假设我正在执行对/ api / customers的GET调用

我希望每个客户返回“地址”字段,该字段是“客户”模型中定义的street_name和door_number属性的串联。

所以我需要在某个地方定义“地址” = this.street_name +''+ this.door_number并将其添加到响应中。有人可以给我指出一个例子吗?

更新

我试图将其添加到customer.js

'use strict';
const app = require('../../server/server');

module.exports = function(Customer) {

  const query = "SELECT *, CONCAT( door_number|| ' ' || street_name) as address from my_customer_table";

  app.dataSources.mysqlIDs.connector.query(query, (err, res) => {
    if (err) {
      console.log(err.message);
    }
    return res;
  });
};

更新2:

如果我在控制台上登录res:

[ RowDataPacket {
    id: 5,
    ...
    address: '491 Hondsruglaan' 
  },
  RowDataPacket {...
  }
]

当我在SQL查询地址中使用管道字符时,将显示为:

address: '1'

但是地址字段尚未反映在API响应中。所有字段都在那里,但没有地址。似乎仅在启动应用程序时执行代码。

2 个答案:

答案 0 :(得分:2)

const查询= SELECT *, CONCAT( door_number|| ' ' || street_name) as address from customer

这里Iam使用postgresql数据库

loopback.dataSources.postgres.connector.query(query, (err, res) => { return cb(err, res); });

仅通过执行本机查询,您可以在响应中实现两列的连接,环回的默认方法不支持

答案 1 :(得分:1)

我认为这是一个优雅的解决方案:

// customer.js

module.exports = function(Customer) {
  Customer.afterRemote('find', function(context, customers, next) {
    context.result.forEach(customer => {
      customer.address = customer.street_name + ' ' + customer.door_number
    })
    
    next()
  })
}