mysql - 无法读取未定义的属性“长度”(Angular 6)
问题描述
我正在尝试在我的项目中显示 MySQL 表,该表现在从本地 json 文件中获取表。
public getProperties(): Observable<Property[]>{
return this.http.get<Property[]>(this.url + 'properties.json');
}
当用我使用 NodeJs 和 express 获取 mysql 表对象的 URL 替换 URL 时,我在控制台中收到给定的错误。我就是这样去的:
public getProperties(): Observable<Property[]>{
return this.http.get<Property[]>('http://localhost:3000/');
}
有没有办法可以成功传递 url 来访问 MySQL 表?
这是我的 NodeJS 代码:
router.get('/', function(req, res, next) {
res.setHeader("Content-Type", "text/html");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
console.log("Function called")
con.query('SELECT * FROM authors', (err,rows) => {
if(err) throw err;
console.log('Data received from Db:');
console.log(rows);
DBRows = rows;
console.log("Data sent")
res.send(JSON.stringify(DBRows));
});
});
con.query('SELECT * FROM authors', (err,rows) => {
if(err) throw err;
console.log('Data received from Db:');
console.log(rows);
DBRows = rows;
console.log("Data sent")
JSON.stringify(DBRows);
res.send(JSON.stringify(DBRows));
});
});
解决方案
“JSON.stringify(DBRows)”的结果是什么?
您期望结果中有一个属性数组(Property[]),但您返回一个字符串化的 DBRows,它可能是一个对象
您需要修改代码以使结果符合您的预期。如果“JSON.stringify(DBRows)”的结果是
{
values: [ {/* DbRow */}, {/* DbRow */}, ... ]
}
然后在您的服务中,您需要期待一个类似的对象,例如:
export class Response {
values: Property[];
}
...
return this.http.get<Response>('http://localhost:3000/');