我无法使用npm start

时间:2016-03-05 05:06:59

标签: node.js electron

我无法使用npm start(用于启动电子应用)访问index.html中index.js中的变量'dps'声明 我能够访问我的sql并获取index.js中的数据,我想在index.html上显示(使用nodeJs和Electron) 'dps'指的是具有mysql数据的js对象

//我的index.js文件有

var app = require('app'); 
var dps = [{x:1,y:2}];
// Module to create native browser window.
var BrowserWindow = require('browser-window');
var mainWindow = null;
var dps = [{x:1,y:2}];
var mysql = require('mysql');

// Quit when all windows are closed.
app.on('window-all-closed', function () {
  if (process.platform != 'darwin') {
    app.quit();
  }
});

app.on('ready', function () {

  // Create the browser window.
  mainWindow = new BrowserWindow({ width: 800, height: 600 });
  mainWindow.loadUrl('file://' + __dirname + '/index.html');
  // Open the devtools.
  // mainWindow.openDevTools();
  // Emitted when the window is closed.
  mainWindow.on('closed', function () {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null;
  });
});


//My html file

<html>
<head>
<!--<script type="text/javascript" src = "index.js"/>-->
<script type="text/javascript" src="index.js"></script>
    <script type="text/javascript">
  alert(dps); --- not getting dps value here(/anywhere in html)
</head>
</html>

1 个答案:

答案 0 :(得分:0)

index.html中的代码运行在与index.js(在Main进程中运行)不同的进程(通常称为Renderer进程)中。此外,您的index.js文件是一个模块,因此,即使这两个文件由同一个进程运行,您也必须导出dps变量或使其成为全局变量,如global.dps(然而,这是一种不好的做法!)。

有许多方法可以在Main和Renderer进程之间共享日期; Electron为此目的提供ipcMainipcRendererremote模块;您还可以使用URL编码参数将数据从Main传递到Renderer(但如果数据发生更改,这对您没有帮助);最后,您可以使用任何其他形式的IPC(例如,通过套接字发送消息,使用共享内存或共享文件等) - 但最好从Electron的ipc或{{1}开始} modules。

话虽如此,在您的情况下,consensus似乎不是仅使用Main进程进行数据库访问,然后将信息传递给Renderer,而是直接从Renderer访问DB;这样你根本不必担心IPC(至少在这种情况下)。