gpt4 book ai didi

mysql - Electron 桌面应用程序 : Using mysql data in a component with Angular2 front end

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:04 24 4
gpt4 key购买 nike

我是 Electron 的新手,这是我第一次尝试创建应用程序。这是一个桌面应用程序。该应用程序的一页仅显示客户使用标准数据库查询的当前预测。

我正在使用本地数据库 (mysql) 来保存汇总数据,例如按期间的销售、预测。我已经使用 mysql 模块成功地从数据库中提取了 javascript 文件中的信息。

**var mysql = require('mysql')
//credentials for the database
var connection = mysql.createConnection({
host :'localhost',
user :'root',
password :'root',
database :'dw'
});
...etc**

我想在使用 TypeScript 的前端使用 Angular2。如何将从数据库 (Javascript) 中提取的信息发送到 Typescript 中不同文件中的 Angular 组件?

这是通过渲染页面和主页之间的 IPC 执行的吗?对数据库的 HTTP 服务调用似乎有点过分,因为它在同一台电脑上。我是否需要只要求对组件进行 Javascript 数据库调用?

最佳答案

更新可以在不与主线程通信的情况下直接从组件调用数据库。创建一个 DB 服务:

import {Injectable} from '@angular/core';
const mysql = (<any>window).require('mysql');

@Injectable()
export class DBService {
connection: any;

constructor() {
this.connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'db_name'
});
this.connection.connect((err) => {
if (err) {
console.log('error connecting', err);
}
});
}

query(sql: string) {
this.connection.query(sql, function(err, results, fields) {
console.log('err', err);
console.log('results', results);
console.log('fields', fields);
});
}
}

然后,在任何 Angular 2+ 组件中:

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(private db: DBService) {}
ngOnInit() {}
getProducts() {
this.db.query('SELECT * FROM product');
}
}

旧答案

这是我目前使用 Angular 2+ 连接到 mysql 的解决方法。

main.js 上:

const {app, BrowserWindow, ipcMain} = require('electron')

const mysql = require('mysql')
const connection = mysql.createConnection({
host : 'localhost',
user : 'username',
password : 'password',
database: 'your_database'
});
connection.connect(function(err) {
if (err) {
console.log('connect', err);
}
});

ipcMain.on('query', function(e, sql) {
console.log('query received', sql);
connection.query(sql, function(err, rows, fields) {
if(err){
console.log('error executing', err);
return false;
}
console.log('success', rows);
});
});

创建一个 DB 服务 (app/services/db.service.ts)

import { Injectable } from '@angular/core';
const electron = (<any>window).require('electron');

@Injectable()
export class DBService {

constructor() { }

query(sql: string) {
electron.ipcRenderer.send('query', sql);
}
}

(不要忘记将其添加到 app.modules.ts)

import {DBService} from './services/db.service';
...
providers: [DBService]

然后在 Angular2+ 应用程序的任何组件中,您都可以使用它:

        import {DBService} from './services/db.service';
...
constructor(private db: DBService) {}
getProducts() {
this.db.query('SELECT * FROM product');
}

希望这对您有所帮助。

关于mysql - Electron 桌面应用程序 : Using mysql data in a component with Angular2 front end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com