Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当NodeJS应用程序被设计为在客户端上运行时,如何在服务器端使用javascript库?_Javascript_Node.js_Express_Read Eval Print Loop - Fatal编程技术网

当NodeJS应用程序被设计为在客户端上运行时,如何在服务器端使用javascript库?

当NodeJS应用程序被设计为在客户端上运行时,如何在服务器端使用javascript库?,javascript,node.js,express,read-eval-print-loop,Javascript,Node.js,Express,Read Eval Print Loop,我正潜入NodeJS和Express(对我来说太复杂了)来构建一个实时web应用程序。目前,我正试图了解如何在服务器端使用现有的javascript库。问题在于,该库似乎被设计为在客户端运行,因此,说明仅显示如何在客户端使用它。我说的图书馆可以在这里找到 问题: 既然NodeJS web应用是基于javascript构建的,那么我可以在服务器端运行任何非gui的javascript库,这公平吗 有谁能提供一些指导,告诉我如何将jsrepl库添加到我的Express 3.0应用程序中,使我能够像

我正潜入NodeJS和Express(对我来说太复杂了)来构建一个实时web应用程序。目前,我正试图了解如何在服务器端使用现有的javascript库。问题在于,该库似乎被设计为在客户端运行,因此,说明仅显示如何在客户端使用它。我说的图书馆可以在这里找到

问题:

  • 既然NodeJS web应用是基于javascript构建的,那么我可以在服务器端运行任何非gui的javascript库,这公平吗
  • 有谁能提供一些指导,告诉我如何将jsrepl库添加到我的Express 3.0应用程序中,使我能够像在浏览器客户端使用它一样使用它?我是否必须修改jsrepl代码并将“exports.”添加到我想要使用的方法中
  • 也就是说,在服务器端,我可以执行以下代码

    var jsrepl = new JSREPL({  
      input: inputCallback,  
      output: outputCallback,  
      result: resultCallback,  
      error: errorCallback,  
      progress: progressCallback,  
      timeout: {  
        time: 30000,  
        callback: timeoutCallback  
      }  
    });  
    
    提前感谢你的智慧!我正在尽我最大的努力去理解这一切

  • 不,在客户端有一些东西是服务器端没有的(反之亦然):例如,DOM
  • 我自己从来没有使用过
    jsrepl
    ,但是假设它是平台无关的,
    require()
    从节点模块中调用它应该可以。然而,在所讨论的脚本中似乎有一些特定于DOM的东西(例如,
    document.getElementById
    )表明了另一种情况

  • 您可以在节点中运行,该节点是无头webkit浏览器。然后在phantomjs内部运行jsrepl。

    所以这是可能的,但是为了让它工作,您需要一些严重的黑客攻击。因为这不是一个节点模块,并且正如其他人所指出的那样是从浏览器写入的,所以您需要在节点中使用DOM来执行它。幸运的是,我们有一个精彩的项目,它让我们能够做到这一点。让我们把这件事安排好

    • cd
      到节点项目中(如果还没有,请创建一个)
    • 克隆下jsrepl repo
      git克隆git://github.com/replit/jsrepl.git
    • 将cd放入
      jsrepl
      并初始化子模块
      git子模块更新--init--recursive
    • 仍然在文件夹中,运行
      npm install coffee script
      npm install uglify js
      ,这些依赖项在repo(ugh)中没有提到
    • 确保java已安装并运行
      cake bake
      。在编译java文件和类似命令的漫长过程之后,命令将完成,jsrepl将被构建并准备就绪
    • 运行
      npm install jsdom
      ,然后我们可以开始编写一个示例文件
    下面是一个简单的例子:

    var jsdom = require('jsdom'),
        fs = require('fs'),
        jsrepl = fs.readFileSync('./jsrepl/repl.js', 'utf8');
    
    jsdom.env({
      html: "<script src='jsrepl.js' id='jsrepl-script'></script> ",
      src: [jsrepl],
      done: function(err, window){
        if (err) return console.error(err);
        run_jsrepl.call(window);
      }
    });
    
    function run_jsrepl(){
      console.log(this.JSREPL)
    }
    
    var jsdom=require('jsdom'),
    fs=需要('fs'),
    jsrepl=fs.readFileSync('./jsrepl/repl.js','utf8');
    jsdom.env({
    html:“”,
    src:[jsrepl],
    完成:功能(错误,窗口){
    if(err)返回控制台。error(err);
    运行jsrepl.call(窗口);
    }
    });
    函数run_jsrepl(){
    log(this.JSREPL)
    }
    

    以下是将
    JSREPL
    放入其工作位置所需的最低代码量。我们在这里所做的就是需要jsdom并实例化它,直接从文件中读取jsrepl源代码。如果使用
    节点文件名运行此文件,它将注销您的
    JSREPL
    对象,该对象可以像在浏览器中一样使用:)

    是正确的。jsrepl无法在当前编写的节点环境中工作。也许这会有所帮助,.@ThaddeusAlbers:jsrepl还能够直接执行coffeescript、scheme、lua和python,所以它不仅仅是一个简单的REPL循环,就像node core中的循环一样。+1个问题。有趣的库-纯javascript python、scheme和lua解释器。这个库只是想移植到node.js