![](/img/trans.png)
[英]How can I use a d3 library (like c3.js) on the server side to generate charts in nodejs?
[英]How can I use a javascript library on the server side of a NodeJS app when it was designed to run on the client?
我正在深入研究NodeJS和Express(对我来说太复杂了)来构建一个实时的Web应用程序。 目前,我正在尝试了解如何在服务器端使用现有的JavaScript库。 问题是库似乎被设计为在客户端运行,因此,说明只显示如何在客户端使用它。 我正在谈论的图书馆可以在这里找到......
https://github.com/replit/jsrepl
问题:
意思是,在服务器端,我可以执行以下代码......
var jsrepl = new JSREPL({
input: inputCallback,
output: outputCallback,
result: resultCallback,
error: errorCallback,
progress: progressCallback,
timeout: {
time: 30000,
callback: timeoutCallback
}
});
提前感谢您的所有智慧! 我正在尽我所能去理解这一切。
所以这是可能的,但你需要一些严肃的hackery来使它工作。 由于这不是一个节点模块,并且正如其他人所指出的那样是从浏览器中编写的,因此您需要在节点内使用DOM来执行它。 幸运的是,我们有一个精彩的jsdom项目,它允许我们做到这一点。 所以让我们设置这个东西吧。
cd
进入你的节点项目(如果没有一个,则创建一个) git clone git://github.com/replit/jsrepl.git
jsrepl
并初始化子模块git submodule update --init --recursive
npm install coffee-script
和npm install uglify-js
,repo(ugh)中任何地方都没有提到的依赖项。 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
对象,它可以像在浏览器中一样使用JSREPL
您可以在Node中运行phantomjs ,这是一个无头webkit浏览器。 然后在phantomjs中运行jsrepl。
jsrepl
,但假设它与平台无关,从节点模块中require()
它应该没问题。 但是,在相关脚本中似乎存在一些特定于DOM的内容(例如document.getElementById
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.