Node和MySQL的聚合物无法识别JSON

时间:2017-01-14 05:44:46

标签: node.js polymer

我使用Node和MySQL作为后端,使用Polymer作为前端,我无法让Polymer渲染JSON数组。

节点/ MySQL代码

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    database : 'test'
});
connection.connect();



 connection.query('SELECT * FROM ACTIVITY', function(err, rows, fields) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  json = JSON.stringify(rows);
  console.log(json);
});

connection.end();

聚合物前端

<paper-dropdown-menu label="Activity Selection">
  <iron-ajax 
    id="getActivity"
    auto
    url="scripts/dbcon.js"
    handle-as="json"
    on-response="handleResponse"
    last-response="{{ajaxResponse}}">
  </iron-ajax>
  <paper-listbox class="dropdown-content">
    <template is="dom-repeat" items="[[ajaxResponse]]">
      <paper-item><b>{{item.ACTIVITY_NAME}}</b></paper-item>
    </template>
  </paper-listbox>
</paper-dropdown-menu>

JSON输出

[{"ID":1,"ACTIVITY_NAME":"Coffee"},{"ID":2,"ACTIVITY_NAME":"Gym"},{"ID":3,"ACTIVITY_NAME":"Lunch"},{"ID":4,"ACTIVITY_NAME":"Vending Machine"},{"ID":5,"ACTIVITY_NAME":"Pool"}]

当我运行此命令时:node dbcon.jsconsole.log的输出是上面显示的JSON数组。

由于某种原因,Polymer不识别JSON数组。在Chrome DevTools控制台中,没有错误/输出。

在另一个测试场景(工作正常)中,我手动将JSON数组输出复制到文件中,将url参数从"scripts/dbcon.js"更改为"scripts/test.json",然后重新加载电子应用;和Polymer能够在下拉列表中显示JSON内容。

1 个答案:

答案 0 :(得分:1)

<iron-ajax>.url属性用于指定请求的URL目标。它不会像JavaScript那样执行响应(就像<script>标记一样),这似乎是您所期待的。

在您的情况下,<iron-ajax>正在读取scripts/dbcon.js的内容并尝试将其解析为JSON(因为handle-as="json")。解析失败,导致null响应值。

要解决此问题,您应该将<iron-ajax>.url设置为提供JSON响应的节点服务器的URL。