browserify错误:http.createServer不是一个函数
我试图browserify这个节点的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不支持HTTP服务器。 我该如何解决这个问题?
您无法从Web浏览器内运行Web服务器。 浏览器中没有任何东西可以像Node的http
模块那样工作。 在浏览器中运行PhantomJS也是没有意义的,因为PhantomJS 是一个Web浏览器。
你想要完成什么样的行为?
更新:
好像你试图在浏览器中运行Node.js代码。
浏览器中的JavaScript引擎比Node.js中的JavaScript引擎更具有限制性,例如,出于安全原因,您无法从浏览器内部访问文件系统(否则,您可以读取访问您网页的任何人的硬盘驱动器) 。
Browserify确实包含了一些“shims” ,它会把小型的JS库放到浏览器中的代码中,并且匹配Node.js的API,允许一些 Node.js特定的JS代码在浏览器中执行。
在你的情况下,你需要Phantom
,这似乎又要求http
。 对于Browserify文档,它会看到require('http')
并为http模块包含一个shim (因为浏览器没有提供自己的http
模块)。
Phantom
模块然后尝试调用http.createServer()
但根据该http shim的文档:
除了http.METHODS和http.STATUS_CODES之外,该模块还实现http.request,http.get和http.ClientRequest和http.IncomingMessage的大部分。
所以http.createServer()
不支持http.createServer()
。 这也是有道理的,因为浏览器永远不会让你在自己的内部打开一个http服务器,否则导航到别人的网站可能会导致你的浏览器开始向外界提供内容,这显然没有意义。
在你的评论中:
“我希望我的节点js脚本可以从另一个JS代码执行”
你不指定什么“其他的JS代码”在运行。如果该JS代码已经运行在节点,那么你根本不需要Browserify。 如果你想让浏览器启动一个真正的Node.js进程,这种情况不会发生,因为显然的安全原因,因为浏览到一个网页不应该有能力运行任何可执行文件系统。
Browserify允许你做的就是取最初用于Node.js的代码,然后在浏览器中运行它,但是在运行时它在浏览器中执行,而不是在Node.js中,所以你只能使用JS代码浏览器的JS运行时限制。
如果你试图在Node.js中执行你的代码,那么你需要通过启动Node.js可执行文件来实现,无论是从命令行还是让另一个程序为你启动进程,但是不能从networking浏览器内完成。 如果您试图让用户导航到您的网站,然后让这些代码在浏览器中而不是Node.js中运行,那么您只需要使用在浏览器中工作的模块。
- NodeJS – Google API模块 –
- 我如何通过NodeJs在谷歌云中设置数据存储区索引configuration?
- Google API,drive.files.list和仅返回子文件
- nodejs googleapis,authClient.request不是一个函数
- oauth2Client.getToken缺lessrefresh_token
- 如何自动获取节点谷歌API的授权令牌为Gmail
- Google API NodeJS:calendar.events.watch获取错误push.webhookUrlNotHttps或pushWebhookBadDomain
- 使用从客户端接收到的谷歌授权代码在服务器端获取访问令牌javascript(nodejs)
- 如何从android与socket.io模块发送数据到nodejs服务器?