browserify 错误:http.createServer 不是一个函数
browserify Error : http.createServer is not a function
我试图浏览器化这个节点js脚本:
var phantom = require('phantom')
phantom.create(function(ph) {
ph.createPage(function(page) {
page.open("editor.html", function(status) {
console.log("opened diagram? ", status);
page.evaluate(function() {
return document.getElementById("GraphImage").src;
}, function(result) {
//console.log(result);
ph.exit();
});
});
});
});
所以我使用了这个命令:
browserify myscript.js > bundle.js
当我从 html 文件运行 bundle.js 时,出现此错误:
http.createServer is not a function
似乎Browserify不支持httpserver。如何解决此问题?
您无法从 Web 浏览器内部运行 Web 服务器。浏览器中确实没有任何东西可以像 Node 的 http
模块一样。在浏览器中运行PhantomJS也没有意义,因为PhantomJS是一个Web浏览器。
您要完成的预期行为是什么?
更新:
您似乎正在尝试在浏览器中运行适用于 Node.js 的代码。
浏览器内部的JavaScript引擎比Node.js中的限制要严格得多,例如,出于安全原因,您无法从浏览器内部访问文件系统(或者您可以读取访问您网页的任何人的硬盘驱动器(。
Browserify确实包含一些"填充码",这些"填充码"会将小型JS库放入您的代码中,这些库可以在浏览器中工作并与Node.js的API匹配,从而允许一些Node.js特定的JS代码在浏览器中执行。
在您的情况下,您需要Phantom
,这似乎反过来需要http
。根据 Browserify 文档,它将看到require('http')
并包含 http 模块的填充程序(因为浏览器不提供自己的http
模块(。
然后,Phantom
模块尝试调用http.createServer()
但要遵循该 http 填充程序的文档:
该模块实现了http.request,http.get和大部分http。ClientRequest 和 http。除了 http 之外的传入消息。方法和 http。STATUS_CODES。
所以http.createServer()
垫片不支持。这也是有道理的,因为浏览器永远不会让你在内部打开http服务器,否则导航到某人的网站可能会导致你的浏览器开始向外界提供内容,这显然没有意义。
在您的评论中:
"我希望我的节点JS脚本可以从另一个JS代码执行">
您没有指定"其他 JS 代码"正在运行的内容。如果该JS代码已经在Node中运行,那么您根本不需要Browserify。如果您尝试让 Web 浏览器启动实际的 Node.js 进程,这不会发生,同样出于明显的安全原因,因为浏览到网页不应该能够在您的系统上运行任何可执行文件。
Browserify 允许您做的是获取最初用于 Node.js 的代码,并在浏览器中运行它,但它在浏览器中执行 t 运行时,而不是在 Node.js 中执行,因此您只能使用在浏览器 JS 运行时约束下工作的 JS 代码。
如果您尝试在 Node.js 中执行代码,那么您需要通过让某些东西启动 Node.js 可执行文件来做到这一点,无论是从命令行还是让另一个程序为您启动该过程,但这不能从 Web 浏览器中完成。如果您尝试让用户导航到您的网站,然后让此代码在浏览器中而不是在 Node.js 中运行,那么您只需要使用在浏览器中工作的模块。
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟