要求没有babel的电子文件

时间:2018-02-22 00:57:03

标签: javascript mysql node.js npm electron

我正在尝试将网络应用程序转换为电子应用程序。我有多个函数,在我使用转换器导入到main.js的不同文件中。

但是,每当我尝试在我的电子应用程序中执行此操作时,我遇到了一个问题,我正在使用模块来避免使用php来访问我的数据库。相反,我在npm使用mysql模块。

我想将此函数保存在自己的文件中,然后在main.js中要求它。当我尝试用babel进行转换时,我得到一个关于Net.Connection无法正常工作的错误(或者沿着这些行的东西)。据我了解,这是因为Node的工作原理。我很乐意解决这个问题,但我希望有一种方法可以将这个功能保存在另一个文件中,并导入它而不必使用babel。

function loadColourFilter(){
  var mysql      = require('mysql');
  let query_result;

  var connection = mysql.createConnection({
    host     : 'xxxxxxxxxxxx',
    user     : 'xxxxxxxxxxxx',
    password : 'xxxxxxxxxxxx',
    database : 'xxxxxxxxxxxx'
  });

  connection.connect();
  let query = "xxxxxxxxxxxxxxxx";
  connection.query(query, function (error, results, fields) {

  });

  connection.end();
  return (query_result);

}
编辑:我删除了函数的某些部分以保证凭据的安全性等等。我很确定他们的缺席在尝试解决这个问题时不会有任何改变。

编辑: 我的项目目录基本上是

src
--- js
--- --- main.js
    --- functionFile.js // This would be where my loadColourFilter function above would be saved
--- node_modules
--- --- ...
--- index.html // js/main.js is referenced in a script tag here.
--- main.js // Where the electron window is created.
--- package.json

2 个答案:

答案 0 :(得分:1)

应该有2个js上下文,一个在电子应用程序中运行,一个在节点中运行。如果您处于电子上下文(类似于浏览器js上下文),则无法直接从目录中要求脚本。

我只是假设是这种情况,因为我们没有为您的问题获得大量信息,而另一个答案应该已经解决了您的问题。

尝试将您的js文件包含在index.html中,看看是什么。

编辑:因为它是babel的一个Transpiling错误,所以当它应该为浏览器进行转换时,babel可能正在为节点进行转换。

答案 1 :(得分:0)

您可以使用NodeJS轻松创建一个简单的本地模块,方法是创建一个源文件,然后添加一个module.exports赋值,从文件中导出一些功能/变量/ etc。在您的情况下,类似于名为colourFilter.js的文件,其内容为:

function load(){
  var mysql      = require('mysql');
  let query_result;

  var connection = mysql.createConnection({
    host     : 'xxxxxxxxxxxx',
    user     : 'xxxxxxxxxxxx',
    password : 'xxxxxxxxxxxx',
    database : 'xxxxxxxxxxxx'
  });

  connection.connect();
  let query = "xxxxxxxxxxxxxxxx";
  connection.query(query, function (error, results, fields) {

  });

  connection.end();
  return (query_result);

}

module.exports = load

然后在您希望使用它的代码中,通过执行以下操作来包含它:

loadColourFilter = require('colourFilter.js')

使用像

这样的功能
let result = loadColourFilter()

这是将代码拆分为多个文件/类/模块的简单方法,但仍然保留一个主文件/类/模块作为面向公众的部分或入口点的重要文件/类/模块。当然,你不必使用我上面使用过的名字:P

如果您想制作一个对象式模块,您可以改为输出像

这样的对象
module.exports = {
  load
}

或者

module.exports = {
  load: loadFunctionNameInThisFile
}

然后像

一样使用它
const colourFilter = require('colourFilter.js')

let result = colourFilter.load()