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

标签 javascript node.js express read-eval-print-loop

我正在研究 NodeJS 和 Express(这对我来说太复杂了)来构建一个实时网络应用程序。目前,我正在尝试了解如何在服务器端使用现有的 javascript 库。问题是该库似乎设计为在客户端运行,因此,说明仅向您展示如何在客户端使用它。我正在谈论的图书馆可以在这里找到...

https://github.com/replit/jsrepl

问题:

  1. 既然 NodeJS 网络应用是基于 javascript 构建的,那么可以说我可以在服务器端运行任何非图形用户界面的 javascript 库吗?
  2. 任何人都可以提供一些指导,说明如何将该 jsrepl 库添加到我的 Express 3.0 应用程序中,使我能够像在客户端浏览器中使用它一样使用它吗?我是否必须修改 jsrepl 代码并添加“导出”。我想使用的方法?

也就是说,在服务器端,我可以执行下面的代码...

var jsrepl = new JSREPL({  
  input: inputCallback,  
  output: outputCallback,  
  result: resultCallback,  
  error: errorCallback,  
  progress: progressCallback,  
  timeout: {  
    time: 30000,  
    callback: timeoutCallback  
  }  
});  

提前感谢您的智慧!我正在尽力理解这一切。

最佳答案

所以这是可能的,但你需要一些严肃的黑客才能让它工作。由于这不是 Node 模块,并且正如其他人所指出的那样是从浏览器编写的,因此您需要 Node 内的 DOM 来执行它。幸运的是,我们有精彩jsdom让我们能够做到这一点的项目。那么让我们设置一下吧。

  • cd 进入您的 Node 项目(如果还没有,请创建一个)
  • 克隆 jsrepl 仓库 git clone git://github.com/replit/jsrepl.git
  • cd 进入 jsrepl 并初始化子模块 git submodule update --init --recursive
  • 仍然在文件夹中,运行 npm install coffee-scriptnpm install uglify-js,这些依赖项在 repo 中的任何地方都没有提到(呃)。<
  • 确保安装了 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)
}

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

关于javascript - 当 NodeJS 应用程序设计为在客户端上运行时,如何在它的服务器端使用 javascript 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501160/

相关文章:

javascript - 使用 React-redux-form 只读输入字段

node.js - 如何在 Passport 策略中使用res.send?

javascript - css 定位 我在定位时遇到问题

javascript - 找不到 `pages` 目录。带有 pkg​​ 的 NextJS

javascript - 如何将 javascript 中的日期格式化为 DD-MMM-YYYY?

javascript - 如何在不使用 HTML 的情况下格式化电话号码

node.js - NodeJS : understanding promise

javascript - sapui5 sap.ui.table 如何以编程方式取消选中表行的复选框

.net - 使用 C# 和 .net 实现可扩展的类似 Node.js 的 HTTP 服务器

javascript - ExpressJS + MongoDB - 登录/注册方法