Javascript nodejs-webserver“;“未定义”不是一个函数;

Javascript nodejs-webserver“;“未定义”不是一个函数;,javascript,node.js,webserver,Javascript,Node.js,Webserver,我正在阅读一本书(pro Angularjs)中的教程,在设置nodejs Web服务器时遇到了一些问题 就像在书中描述的那样,我使用以下server.js创建它: var connect = require('connect'); connect.createServer(connect.static("../angularjs")).listen(5000); 当我试图用“node server.js”启动服务器时,我得到错误: C:\Programme\nodejs>node se

我正在阅读一本书(pro Angularjs)中的教程,在设置nodejs Web服务器时遇到了一些问题

就像在书中描述的那样,我使用以下server.js创建它:

var connect = require('connect');
connect.createServer(connect.static("../angularjs")).listen(5000);
当我试图用“node server.js”启动服务器时,我得到错误:

C:\Programme\nodejs>node server.js
C:\Program Files\nodejs\server.js:2
connect.createServer(connect.static("../angularjs")).listen(5000);
                                   ^
TypeError: undefined is not a function
    at Object.<anonymous> (C:\Program Files\nodejs\server.js:2:36)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3
C:\program\nodejs>node server.js
C:\ProgramFiles\nodejs\server.js:2
connect.createServer(connect.static(“../angularjs”)).listen(5000);
^
TypeError:undefined不是函数
反对。(C:\ProgramFiles\nodejs\server.js:2:36)
在模块处编译(Module.js:460:26)
在Object.Module.\u extensions..js(Module.js:478:10)
在Module.load(Module.js:355:32)
在Function.Module.\u加载(Module.js:310:12)
位于Function.Module.runMain(Module.js:501:10)
启动时(node.js:129:16)
在node.js:814:3
任何帮助都将不胜感激

您好, 克里斯汀

试试看

var connect = require('connect');
var app = connect();
app.listen(5000,function(){
    console.log('listen on 5k port');
})
app.use('../angularjs', function(req, res){
})

您收到此错误是因为在您调用时:

connect.static("../angularjs")
connect.createServer(...).listen(5000);
您没有要引用的有效连接服务器实例,因为它是在您调用时创建的:

connect.static("../angularjs")
connect.createServer(...).listen(5000);
在调用
connect.createServer()
之前,connect是对函数的引用,而不是带有
.static()
函数的服务器实例

在调用其任何函数之前,需要创建服务器实例,如中所示:

var server=connect.createServer(); // now connect is a server instance

server.static('../angularjs');

server.listen(5000);
有关连接的更多信息,请参阅

更新 截至connect@3.3.5,connect不再导出
createServer()
函数。实际上,connect的实际导出是createServer函数本身

因此,与其打电话:

var server=connect.createServer();
你应致电:

var server=connect();
它将返回与上一次调用相同的结果

在其3.X.X版本中连接的另一个(big)变化是将其中间件组件提取到单独的模块中。这就是调用
connect.static()
将不再工作的原因

有两种方法可以解决您当前的问题:

首先,假设您仍然希望在您的书(现在有些过时)中探索这些示例,您可以
npm安装connect@2.29.1
这将使当前版本的connect恢复到新的内部重组发生之前的最后一个稳定版本。完成此操作后,书中的示例应如广告所示有效

或者,您可以通过安装所需的模块(使用
npm install service static
)并对代码进行以下更改,重构示例以使用新的模块化中间件模块:

var connect=require('connect'),
    serveStatic=require('serve-static');

var server=connect();

server.use(serveStatic('../angular.js'));

server.listen(5000);
有关现在模块化的中间件组件的列表,请参见

我的建议是理解为什么connect的维护者决定将其中间件组件移动到单独的模块中(提示:connect变得越来越大、越来越笨重,因此为了减小其尺寸和复杂性,我们决定删除所有用户不需要的部分,并将它们移动到自己的模块中,从而使它们成为“可选的”)以及如何使用我上面概述的相同策略翻译您书中的示例


这项额外工作的价值在于,一旦您读完这本书并了解如何有效地使用connect,您就不需要从新版本的角度“重新学习”所有内容。

connect.createServer()
拒绝为我工作。我仍然得到
未定义不是一个函数
。您使用的是什么版本的connect?我使用的是版本
3.3.5
。啊哈!connect@3.3.5删除了导出的createServer函数,而是将其导出为模块本身,以便现在可以替换:
var server=connect.createServer()
使用
var server=connect();
你应该可以走了。
connect()
可以工作,但是
connect.static
仍然不能工作。
connect().static
。我如何访问
static
功能?