无法通过nodejs

时间:2018-03-22 08:50:56

标签: jquery sql-server node.js

这是我的代码:

<script>

        var response = null;
        ////get pie data from postgredql
        $(document).ready(function () {

            $.ajax({
                url: "/piedata",
                type: "get",
                dataType: 'json',
                async: false,
                contentType: "application/json",

                success: function (msg) {

                   // alert("msg");
                    //alert(JSON.stringify(msg));
                    msg1 = JSON.stringify(msg);
                    response = JSON.parse(msg1);
                    //alert(JSON.stringify(response));
                    //alert(response);
                }

            });
        });
        var canvas = d3.select('#piec')
                        .append('svg')
                        .attr({ 'width': 1000, 'height': 600, 'radius' : 1000 });

        //var data = [{ "label": "Maximo", "value": 10},
        //            { "label": "ASD", "value": 40},
        //            { "label": "Iportman", "value": 5},
        //            { "label": "Sales", "value": 10},
        //            { "label": "Finance", "value": 10},
        //            { "label": "HR", "value": 10 }];

        var data = JSON.stringify(response);

              //alert(data);
        //alert(response);
              alert(JSON.stringify(response));


              var colors = ['Tomato', 'DodgerBlue'];


        var colorscale = d3.scale.linear().domain([0, data.length]).range(colors);

        var arc = d3.svg.arc()
                        .innerRadius(0)
                        .outerRadius(250);

        var arcOver = d3.svg.arc()
                        .innerRadius(0)
                        .outerRadius(200 + 10);

        var pie = d3.layout.pie()
                        .value(function (d) { return d.value; });


        var renderarcs = canvas.append('g')
                        .attr('transform', 'translate(600,300)')
                        .selectAll('.arc')
                        .data(pie(data))
                        .enter()
                        .append('g')
                        .attr('class', "arc");

        renderarcs.append('path')
                .attr('d', arc)
                .attr('fill', function (d, i) { return colorscale(i); })
                .on("mouseover", function (d) {
                    d3.select(this).transition()
                       .duration(1000)
                       .attr("d", arcOver);
                })
                .on("mouseout", function (d) {
                    d3.select(this).transition()
                       .duration(1000)
                       .attr("d", arc);
                });

        renderarcs.append('text')
                .attr('transform', function (d) {
                    var c = arc.centroid(d);
                    console.log(c);
                    return "translate(" + c[0] + "," + c[1] + ")";
                })
            .attr("text-anchor", "middle")
            .text(function (d, i) { return data[i].State; });

    </script>

这里是app.js代码:

app.get('/piedata', function (req, res) {

    var sql = require("mssql");

    // config for your database
    var config = {
        user: 'sa',
        password: 'password',
        server: 'localhost',
        database: 'datas',
        port: '5124'
    };

    // connect to your database
    sql.connect(config, function (err) {

        if (err) console.log(err);

        // create Request object
        var request = new sql.Request();

        // query to the database and get the records
        request.query('select State,sales from Orders$', function (err, result) {

            if (err) console.log(err)

            // send records as a response
            res.send(result);
            sql.close();

        });
    });
});

请让我知道如何在饼图中附加数据以绘制饼图并使用nodejs,sql server,jquery,我需要从sql server数据绘制饼图,我使用的是两个参数,我必须绘制饼图,我从服务器得到响应,但无法将该数据附加到图表中。

2 个答案:

答案 0 :(得分:-1)

https://codepen.io/anon/pen/PRmdBZ

您的问题出现在下面的代码中。

 var pie = d3.layout.pie()
                    .value(function (d) { return d.value; });

必须是

 var pie = d3.layout.pie()
                    .value(function (d) { return d.sales; });

答案 1 :(得分:-1)

  

动态数据

以下代码从api获取动态数据。我已经使用临时虚拟API来给你一个答案,并获得清晰的想法。

<!DOCTYPE html>
<html>

  <head>
    <meta content="utf-8" http-equiv="encoding">
    <title>Dsnap - Charts</title>
  </head>

  <body>
    <div id="wrapper">
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://d3js.org/d3.v3.min.js"></script>
    <script>
      $(document).ready(function() {
        function loadD3Canvas(data) {
          var canvas = d3.select('#wrapper')
            .append('svg')
            .attr({
              'width': 650,
              'height': 500
            });

          var colors = ['red', 'blue'];
          var colorscale = d3.scale.linear().domain([0, data.length]).range(colors);

          var arc = d3.svg.arc()
            .innerRadius(0)
            .outerRadius(100);

          var arcOver = d3.svg.arc()
            .innerRadius(0)
            .outerRadius(150 + 10);

          var pie = d3.layout.pie()
            .value(function(d) {
              return d.high;
            });


          var renderarcs = canvas.append('g')
            .attr('transform', 'translate(440,200)')
            .selectAll('.arc')
            .data(pie(data))
            .enter()
            .append('g')
            .attr('class', "arc");

          renderarcs.append('path')
            .attr('d', arc)
            .attr('fill', function(d, i) {
              return colorscale(i);
            })
            .on("mouseover", function(d) {
              d3.select(this).transition()
                .duration(1000)
                .attr("d", arcOver);
            })
            .on("mouseout", function(d) {
              d3.select(this).transition()
                .duration(1000)
                .attr("d", arc);
            });

          renderarcs.append('text')
            .attr('transform', function(d) {
              var c = arc.centroid(d);
              return "translate(" + c[0] + "," + c[1] + ")";
            })
            .text(function(d) {
              return d.data.high;
            });
        }
        $.ajax({
          url: " https://api.iextrading.com/1.0/stock/aapl/chart",
          type: "get",
          dataType: 'json',
          async: false,
          contentType: "application/json",

          success: function(msg) {
            msg1 = JSON.stringify(msg);
            response = JSON.parse(msg1);
            loadD3Canvas(response);
          }
        });
      });

    </script>
  </body>

</html>

  

代码中描述的静态数据格式

这是我本地计算机上的工作片段,请查看它,如果出现任何问题,请告诉我。

<!DOCTYPE html>
<html>

<head>
  <meta content="utf-8" http-equiv="encoding">
  <title>Dsnap - Charts</title>
</head>

<body>
  <div id="wrapper">
  </div>
  <script src="https://d3js.org/d3.v3.min.js"></script>
  <script>
    var canvas = d3.select('#wrapper')
      .append('svg')
      .attr({
        'width': 650,
        'height': 500
      });


    var data = {
      "recordsets": [
        { "State": "Kentucky", "sales": 261.96 },
        { "State": "Kentucky", "sales": 731.9399999999999 },
        { "State": "California", "sales": 14.62 },
        { "State": "Florida", "sales": 957.5775 },
        { "State": "Florida", "sales": 22.368000000000002 },
        { "State": "California", "sales": 48.86 },
        { "State": "California", "sales": 7.28 },
        { "State": "California", "sales": 907.152 },
        { "State": "California", "sales": 18.504 },
        { "State": "California", "sales": 114.9 },
        { "State": "California", "sales": 1706.1840000000002 },
        { "State": "California", "sales": 911.424 },
        { "State": "North Carolina", "sales": 15.552000000000003 }
      ]
    };
    var colors = ['red', 'blue'];
    var colorscale = d3.scale.linear().domain([0, data.recordsets.length]).range(colors);

    var arc = d3.svg.arc()
      .innerRadius(0)
      .outerRadius(100);

    var arcOver = d3.svg.arc()
      .innerRadius(0)
      .outerRadius(150 + 10);

    var pie = d3.layout.pie()
      .value(function (d) {
        return d.sales;
      });


    var renderarcs = canvas.append('g')
      .attr('transform', 'translate(440,200)')
      .selectAll('.arc')
      .data(pie(data.recordsets))
      .enter()
      .append('g')
      .attr('class', "arc");

    renderarcs.append('path')
      .attr('d', arc)
      .attr('fill', function (d, i) {
        return colorscale(i);
      })
      .on("mouseover", function (d) {
        d3.select(this).transition()
          .duration(1000)
          .attr("d", arcOver);
      })
      .on("mouseout", function (d) {
        d3.select(this).transition()
          .duration(1000)
          .attr("d", arc);
      });

    renderarcs.append('text')
      .attr('transform', function (d) {
        var c = arc.centroid(d);
        return "translate(" + c[0] + "," + c[1] + ")";
      })
      .text(function (d) {    
        return d.value;
      });
  </script>
</body>

</html>