Javascript browserify错误:http.createServer不是函数

Javascript browserify错误:http.createServer不是函数,javascript,node.js,phantomjs,browserify,google-api-nodejs-client,Javascript,Node.js,Phantomjs,Browserify,Google Api Nodejs Client,我尝试浏览此节点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() {

我尝试浏览此节点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服务器。浏览器中没有任何东西可以像节点的
http
模块那样工作。此外,在浏览器中运行PhantomJS也没有意义,因为PhantomJS是一种web浏览器

你想要达到的行为是什么


更新:

看起来您正试图在浏览器中运行用于Node.js的代码

浏览器中的JavaScript引擎比Node.js中的限制要严格得多,例如,出于安全原因,您无法从浏览器中访问文件系统(或者您可以读取访问您网页的任何人的硬盘)

Browserify会将小型JS库放入在浏览器中工作的代码中,并与Node.JS的API相匹配,从而允许某些特定于Node.JS的JS代码在浏览器中执行

在您的情况下,您需要
Phantom
,而Phantom似乎反过来需要
http
。根据Browserify文档,它将看到
require('http')
和include(因为浏览器本身不提供
http
模块)

然后,
Phantom
模块尝试调用
http.createServer()
,但根据该http垫片的文档:

除了http.METHODS和http.STATUS_代码之外,该模块还实现http.request、http.get以及大多数http.ClientRequest和http.IncomingMessage

因此,垫片不支持http.createServer()。这也是有意义的,因为浏览器永远不会让您打开其内部的http服务器,否则导航到某人的网站可能会导致您的浏览器开始向外部世界提供内容,这显然是没有意义的

在你的评论中:

“我希望我的节点js脚本可以从另一个js代码执行”

您不需要指定“其他JS代码”正在运行什么。如果该JS代码已经在节点中运行,那么您根本不需要Browserify。如果您试图让web浏览器启动实际的Node.js进程,那么出于明显的安全原因,这是不会发生的,因为浏览网页不应该能够在系统上运行任何可执行文件

Browserify允许您使用最初用于Node.js的代码,并在浏览器中运行,但它是在浏览器中而不是Node.js中执行的t运行时,因此您只能使用在浏览器js运行时约束范围内工作的js代码


如果您试图在Node.js中执行代码,那么您需要通过命令行或其他程序启动Node.js可执行文件来执行,但这不能在web浏览器中完成。如果您试图让用户导航到您的网站,然后让这些代码在浏览器而不是Node.js中的机器上运行,那么您只需要使用在浏览器中工作的模块。

browserify也可能不支持PhantomJS,因为它是一个完整的浏览器,不应该在另一个浏览器中运行。谢谢,但是我如何从javascript代码中运行node js脚本,而不使用命令prompti我希望能够在不使用命令提示符的情况下运行我的node js脚本,而不执行“node myscript.js”,我希望我的node js脚本可以从另一个js代码中执行,这就是我使用browserify的原因!还有其他解决方案吗?@Amouna我更新了我的答案,希望对你能做什么和不能做什么更有意义。嗨,谢谢你,我想在没有命令提示的情况下执行我的脚本node js,我想从这样的javascript程序调用我的node js脚本,这就是我使用browserify的原因。我希望能够从javascript程序调用我的node js脚本,这个脚本在后台调用命令提示符并显示结果。@Amouna出于安全原因,您不能让js在浏览器中运行并执行命令行进程。你没办法回避这个问题。Browserify不“在浏览器中运行node.js”,它允许您在浏览器中运行CommonJS模块(node.js使用的模块系统)(本机未提供模块系统)。但是Browserify生成的脚本仍然在浏览器中运行,而不是在node.js中运行。无论您想让background node.js代码做什么,您都可以尝试重写它,以便在浏览器环境中执行。我发现我可以使用express和node js从客户端发送数据,并使用ajax接收这些数据。您认为可以使用我的node js脚本执行此操作吗?我可以使用express通过ajax请求将结果“return document.getElementById(“GraphImage”).src”发送到页面html吗?