如何使用express4-tedious在express.js中返回路由之前更改JSON结果

时间:2018-05-29 08:35:50

标签: sql-server express tedious

以前在我的快递应用程序中使用了非常有用的pg-promise库,我现在需要转换为SQL Server。

我能找到的最类似的库来实现类似的结果是express4-tedious包。我可以使这个工作用于简单的查询,但是,我无法弄清楚如何在返回结果之前操纵返回的json。

app.get('/heatmapData', function(req, res) {
  db.manyOrNone(`
    SELECT
    	id
    	, metricname
    	, metricval as value
    	, backgroundcolor as fill
    	, suggestedtextcolor as color
      , heatmapname
    FROM
    	heatmapdata a
    INNER JOIN
    	heatmapcolors b
    ON
    	a.heatmapset = heatmapname and a.heatmapnumber=b."Order"
  `)
    .then(function(data) {
      let bob = {}
      data.map(item => {
        if (bob[item.metricname] === undefined) {
          bob[item.metricname] = {};
        }
        bob[item.metricname][item.id] = {
          fill: item.fill,
          color: item.color,
          value: item.Value
        };
        bob[item.metricname].heatmapname = item.heatmapname;
      })
      res.status(200).json(bob);
    });
});

当将它转换为SQL服务器时,我可以使用FOR JSON PATH来返回一个不错的javascript对象,但是,在express4-tedious中,我有以下语法:

req.sql('that previous big sql statement...').done(
  (data)=>{
    console.log('this is meant to manipulate the data');
    return data
    })
    .into(res)

然而,这并不能完全回归我期望的结果。任何正确方向的指针都会非常有用!

1 个答案:

答案 0 :(得分:0)

因此,在'学习区'再过几个小时之后,我使用了更高级mssql而不是表达繁琐。这是一个令人难以置信的难以找到的建议,但是这个库在功能上与pg-promise库有些接近,尽管连接设置似乎要困难得多。

const sql = require('mssql');
var sqlconfig = require('./config.js'); //this is where the connection details are
const config = sqlconfig.config;
 
 app.get('/myQueryData', function(req,res){
	
	new sql.ConnectionPool(config).connect().then(pool => {
    return pool.request()
    .query(`	
			SELECT myQuery.* FROM myTables					
		`)
	}).then(function(data){
	let bob={}
        data.recordset.map(item=>{
          if (bob[item.metricname]=== undefined) {
            bob[item.metricname]={};
          }
          bob[item.metricname][item.id]={fill:item.fill, color:item.color, value:item.Value};
          bob[item.metricname].heatmapname = item.heatmapname;
          })
          res.status(200).json(bob); sql.close();
    })
	.catch(err => {
    console.log(err)
	})

sql.on('error', err => {
    console.log(err)
})
});