【问题标题】:Fetch api data from Node从 Node 获取 api 数据
【发布时间】:2020-05-29 00:20:42
【问题描述】:

我有 odbc 连接到 Node JS 上的数据库。

var express = require('express');
var odbc = require('odbc');
var app = express();
var connectionString = 'Dsn=xxx;uid=xxx;pwd=xxx';


app.get('/query/:table', function (req, res) {
    var table = req.params.table;
    //console.log('User is accessing : ' + table);
    var connection = odbc.connect(connectionString, (error, connection) => {
        connection.query("SELECT * FROM " + table + "", (error, result) => {
            if (error) { console.error(error) }
            var json = JSON.stringify(result);
            res.send(json);

    });
});

});

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});
app.listen(80, function () {
    console.log('Application listening on port 80');
});

在 localhost/query/colli 我的输出是:

[ { "MATRK1": "0000019863", "FLG1K1": "S" }, { "MATRK1": "0000019864", "FLG1K1": "S" }](以及更多行)

我的 index.html 看起来像这样:

<script src="https://code.jquery.com/jquery-3.4.1.slim.js"
        integrity="sha256-BTlTdQO9/fascB1drekrDVkaKd9PkwBymMlHOiG+qLI="
        crossorigin="anonymous"></script>
<script>
function getElement(id) {
  return document.getElementById(id);
}

    fetch('http://localhost/query/colli')
        .then(res => res.json())
        .then((res) => {
            const data = res;
            document.write(data)
            getElement('name').innerHTML = 'Name: ' + data;
        });
</script>
<div>
    <p id="name"></p>
</div>
<body>
</body>

但我收到了:

[object Object],[object Object]结果

请问我做错了什么?我想从 Node 中获取数据到 HTML。

非常感谢您的宝贵时间:)

【问题讨论】:

  • 几件事:在节点端只需执行res.json(result) 应该会发回一个json响应。在客户端 html 端,您不需要两个 .thenres.json() 只需阅读 fetch 响应,对其进行控制台并查看您需要的数据。
  • 谢谢你,我修好了,但现在我收到“名称:未定义”根据下面的评论
  • 你能用console.log(data) 的样子显示/更新问题吗?
  • 我在下面回答:)

标签: javascript html node.js json api


【解决方案1】:

因为data 是一个 JSON 对象,所以您不能使用 getElement('name').innerHTML = 'Name: ' + data;。您必须从您的对象中获取一个特定的键,从而获得您正在寻找的值。

【讨论】:

  • 但是当我尝试像这样深入时:getElement('name').innerHTML = 'Name: ' + data.MATRK1;我收到“名称:未定义”
  • 尝试使用console.log(data) 在代码中使用之前查看您拥有的内容
  • 在获取答案时尝试类似的操作:response.json().then(function(data) { });
【解决方案2】:

根据你的console.log,调用get方法

  getElement('name').innerHTML = 'Name: ' + data[0].MATRK1 

由于data是对象数组,我们需要通过索引来访问每个对象,每个对象里面都有键MATRK1,所以我们使用data[0].MATRK1来访问它

【讨论】:

  • (index):13 Uncaught (in promise) TypeError: data.get is not a function at (index):13
  • 取决于你的console.log,你说我在哪里,做这个console.log(data[0])。因为您的数据是一个数组,或者尝试记录所有内容, data.forEach(i => console.log(i)}
  • Foreach 日志:{MATRK1: "0000019863", FLG1K1: "S"} MATRK1: "0000019863" FLG1K1: "S" __proto__: Object
  • 非常感谢 :) 现在不适合放在桌子上,它会解决的 :)
猜你喜欢
  • 1970-01-01
  • 2020-05-05
  • 2023-01-13
  • 1970-01-01
  • 2020-10-05
  • 2016-11-26
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
相关资源
最近更新 更多