typescript 将MySQL数据库连接到Ionic/Angular应用程序

q8l4jmvw  于 2023-03-24  发布在  TypeScript
关注(0)|答案(1)|浏览(198)

我正在开发一个Ionic/Angular应用程序,我正在努力将其连接到我的MySQL数据库(mariadb)。我已经尝试了在网络上找到的几种解决方案,但我一直收到大量的错误消息。我正在寻求有关将MySQL数据库连接到Ionic/Angular应用程序的最佳方法的建议。对此问题的任何帮助都将不胜感激。
假设我的数据库位于服务器www.example.com上11.11.111.111,我的数据库名为products,我的表项名为items,我的密码是1234,我的用户名是海恩。
我已经创建了一个页面连接。服务

import { Injectable } from '@angular/core';
import { createPool, Pool } from 'mariadb';

@Injectable({
  providedIn: 'root'
})
export class ConnectionService {
  private pool: Pool = createPool({
    host: '11.11.111.111',
    user: 'hain',
    password: '1234',
    database: 'products',
    connectionLimit: 5
  });

  constructor() { }

  getItems(): Promise<any> {
    return this.pool.getConnection()
      .then(conn => {
        return conn.query("SELECT * FROM items")
          .then(rows => {
            conn.release();
            return rows;
          })
          .catch(err => {
            conn.release();
            throw err;
          })
      })
      .catch(err => {
        throw err;
      });
  }
}

我有页tab 2

import { Component, OnInit } from '@angular/core';
import { ConnectionService } from '../services/connection.service';

@Component({
  selector: 'app-tab2',
  templateUrl: 'tab2.page.html',
  styleUrls: ['tab2.page.scss']
})
 export class Tab2Page implements OnInit {

  product: any;

  constructor(private connectionService: ConnectionService) {}

  ngOnInit() {
    this.ConnectionService.getItems().then((data) => {
      this.product = data;
    }).catch((err) => {
      console.log(err);
    });
  }

}

我得到这种类型的错误:

./node_modules/mariadb/lib/cmd/handshake/auth/caching-sha2-password-auth.js:2:11-24 - Error: Module not found: Error: Can't resolve 'fs' in …
[ng]
[ng] ./node_modules/mariadb/lib/cmd/handshake/auth/ed25519-password-auth.js:4:15-32 - Error: Module not found: Error: Can't resolve 'crypto' in …

我把它放在package.json上

"browser": {
    "fs": false,
    "net": false,
    "tls": false,
    "os": false,
    "zlib": false,
    "crypto": false
  }

经过研究,我试图建立一个webpack.config.js,但没有成功。
我不是绝对希望继续我的道路,如果你有一个更有效或更安全的方式来操作mariadb数据库,我对所有的解决方案都持开放态度。

gev0vcfq

gev0vcfq1#

很多开发者都会犯同样的错误:他们试图从前端直接连接到数据库。这是一个巨大的安全漏洞,无论是什么类型的项目,都不应该这样做。
您的数据库连接应该总是发生在后端(服务器端)。前端(或客户端)应该向服务器发送请求,要求从数据库中检索一些数据。然后,服务器应该从数据库中返回数据。这是唯一安全的方式。
现在,因为你似乎是新来的,我想我应该解释一下为什么。你的连接数据,如主机,用户和密码应该保密,只有网站的管理员才能访问。在前端将所有内容暴露给公众,允许每个人访问它们,从而连接到您的数据库。然后,有人删除或泄漏您所有的数据只是时间问题。
另外,如果你还不知道,网站的所有前端代码都可以被检查并免费下载和复制。只需点击鼠标右键,选择“检查”,在新打开的窗口中进入“源代码”选项卡,就可以了:所有的代码就在你眼前
至于错误,我真的不能告诉什么可能是问题。你确定你把你的browser的东西放在正确的文件,在根目录,而不是在任何其他字段?除此之外,我在这里没有用。
另外,我在你的ngOnInit中发现了一个错字:它应该是this.connectionService而不是this.ConnectionService(注意大写C)。
希望我能帮上忙。

相关问题