Как изменить результат JSON перед возвратом маршрута в express.js с помощью express4-tedious - PullRequest
0 голосов
/ 29 мая 2018

Раньше я использовал очень полезную библиотеку pg-обещания в моем приложении Express, теперь мне нужно конвертировать в 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 голосов
/ 30 мая 2018

Поэтому, проведя еще несколько часов в «зоне обучения», я использовал более высокий уровень mssql вместо express4-tedious.Это была удивительно трудная рекомендация, но найти эту библиотеку несколько ближе по функциональности к библиотеке pg-обещания, хотя настройка соединения кажется значительно сложнее.

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)
})
});  
...