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

标签 mysql node.js angular electron

我是 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/

相关文章:

node.js - 世博会启动命令未运行

angular - Firebase EmailPasswordAuthProvider 在类型身份验证上不存在

mysql - 使用MySQL准备好的语句并且仍然能够进行注入(inject)

php - 在 php ajax 中加载更多结果的问题

php - 使用 MySQL 5.6 在 JSON 对象中搜索属性

c# - 使用 Visual Studio 和 .NET 的 Angular 2 路由

Angular2 路由组件与父组件的交互

mysql - 如何在in子句-mysql中使用数字列表

node.js - 注销并获取 new/csrfToken 后 SailsJS CSRF 不匹配

node.js - OneDrive API Node.js - 无法使用 :/createUploadSession Content-Range Error