首页 > 解决方案 > 无法读取未定义的属性“长度”(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));

  });

});

标签: mysqlnode.jsangularexpress

解决方案


“JSON.stringify(DBRows)”的结果是什么?

您期望结果中有一个属性数组(Property[]),但您返回一个字符串化的 DBRows,它可能是一个对象

您需要修改代码以使结果符合您的预期。如果“JSON.stringify(DBRows)”的结果是

{
   values: [ {/* DbRow */}, {/* DbRow */}, ... ]
}

然后在您的服务中,您需要期待一个类似的对象,例如:

export class Response {
   values: Property[];
}
...
return this.http.get<Response>('http://localhost:3000/');

推荐阅读