【问题标题】:How to bundle an express server and html script into same Node Webkit application?如何将 express 服务器和 html 脚本捆绑到同一个 Node Webkit 应用程序中?
【发布时间】:2015-11-07 02:45:47
【问题描述】:

尝试使用 Node Webkit 将我当前的 Node.js 应用程序转变为桌面应用程序时,我遇到了非常困难的情况。在不使用 webkit 的情况下,我的应用程序可以完美运行。我在终端中使用“Node app.js”启动我的服务器。然后,当我连接到 localhost:8080 时,客户端连接并加载 index.html 页面;然后该应用程序完美运行。我需要所有这一切都从桌面应用程序中发生,因此我使用 Node webkit。

我不知道如何使用 Node webkit 来实现这一切。我在网上搜索了几个小时,这似乎是一个常见问题,但没有人有一个体面且易于遵循的解决方案。如果有人可以帮助我,将不胜感激。

另外,我尝试使用 package.json 文件中的“node-main”属性首先加载我的 node.js 文件,但这不起作用。出于某种原因,我每次尝试使用“node-main”属性都会使我的 webkit 应用程序崩溃。

如果有人能提供一个关于如何将所有这些实现到一个单节点 webkit 应用程序中的清晰演练,那将非常有帮助。谢谢!

【问题讨论】:

    标签: node.js express server desktop-application node-webkit


    【解决方案1】:

    您需要使用node-main 来完成您想要实现的目标。您的代码可能由于异常而崩溃。

    首先,将node-main 添加到配置中

    "node-main": "index.js",
    

    要调试代码,请使用附加未捕获的异常处理程序:

    var report_error = function(err){
        if (typeof console == 'object' && typeof console.log == 'function') {
            console.log('Exception: ' + err.message, err.stack);
        } else {
            setTimeout(function(){report_error(err);},200);
        }
    
    };
    process.on('uncaughtException', function (err) {
        report_error(err);
    });
    

    请注意,我检查控制台是否可访问 - 当此脚本运行控制台尚不可访问时:

    加载脚本时此符号不可用, 因为脚本是在 DOM 窗口加载之前执行的 (source)。

    我遇到了类似的问题,因为我在 index.js 中使用了 console.log。在使用以下函数而不是 console.log 之后,我让它工作了:

    var console_log = function(err){
        if (typeof console == 'object' && typeof console.log == 'function') {
            console.log(err);
        } else {
            setTimeout(function(){console_log(err);},200);
        }
    };
    

    【讨论】:

      【解决方案2】:

      对于桌面应用程序来说是一个非常奇怪的情况,但如果你真的需要它,你可以首先从你的 NW 应用程序的 index.html 中包含的 window.onload 方法使用子进程运行你的服务器,并带有一些代码像这样:

      var exec = require('child_process').exec;
      exec('node app.js ', function(error, stdout, stderr) {
          if (error !== null) {          
            throw error;
          }
      
          console.log('Server listening');
      });
      

      【讨论】:

        猜你喜欢
        • 2014-03-16
        • 2020-03-04
        • 2018-04-27
        • 2017-06-21
        • 2016-09-20
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        相关资源
        最近更新 更多