我正在尝试从SQLite数据库填充ReactJS中的表组件。如果将我需要的数据库表导出到json中,然后将其导入,则效果很好。如果我改为通过express获取相同的数据,则无论我如何格式化,它都不会填充我的表。
/* Table Component */
export default class SortableTable extends Component {
constructor(props)............................
callAPI() {
fetch("http://localhost:9000/testDB/")
.then(res => res.text())
.then(res => this.setState({ apiResponse: res }));
}
componentWillMount() {
this.callAPI();
}
render() {
var dbArray = this.state.apiResponse;
console.log(eval(dbArray));
return (
<div>
<DataTable
title="Season 1 Leaderboard"
data={dbArray}
/>
<p>{this.state.apiResponse}</p>
</div>
)
}
}
/* Express API */
var express = require('express');
var router = express.Router();
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('./preseason.sqlite3', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the preseason database.');
});
router.get('/', (req, res) => {
let sql = `SELECT nick, rank, wins, loses FROM channel_players`;
db.all(sql, [], (err, rows, fields) => {
if (err) {
throw err;
}
console.log(rows);
console.log('This function will return a list of all stored items from database ' + rows);
res.setHeader('Content-Type','application/json')
res.json(rows);
})
});
module.exports = router
“ eval(dbArray)”显示this.state.apiResponse是一个数组,并且数据从JSON Linter作为有效JSON返回。
如果我使用:
var dbArray = JSON.parse(this.state.apiResponse
返回此错误:“ JSON.parse:JSON数据的第1行第1列的数据意外结束”
如果我使用:
var dbArray = JSON.parse ("[" this.state.apiResponse "]")
然后我没有解析错误,但是该表在其索引中仅显示1个项目(但不显示它)。使用上面大块中引用的代码,该表在其索引中显示的项目数等于“ this.state.apiResponse”中的字符数。
几天前我才刚刚开始学习React和类似的东西,如果我缺少明显的东西,我深表歉意。但是今天我已经为此奋斗了14个小时,茫然不知所措。