Express框架出现了一个非常奇怪的错误

12

我正在尝试在Node中使用Express,安装一切顺利,编译成功,并使用以下命令通过npm安装了express:

npm install express

问题是,每次我尝试“require”它时,都会出现错误!看一下这个简单的app.js文件:

var express = require('express');

当我运行它时:

tlab065:~/proj/Express-server-abstraction> node app.js 
node.js:116
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Cannot read property 'prototype' of undefined
    at Object.<anonymous> (/people/home/jdomingues/local/node/lib/node/.npm/express/1.0.7/package/lib/express/server.js:87:44)    
    at Module._compile (module.js:373:26)
    at Object..js (module.js:379:10)
    at Module.load (module.js:305:31)
    at Function._load (module.js:271:10)
    at require (module.js:317:19)
    at Object.<anonymous> (/people/home/jdomingues/local/node/lib/node/.npm/express/1.0.7/package/lib/express/index.js:28:31)
    at Module._compile (module.js:373:26)
    at Object..js (module.js:379:10)
    at Module.load (module.js:305:31

有人可以帮我吗?为什么会出现这个错误?我怎样才能安装不同版本的express库?

5个回答

16

问题可能在于您已经安装了最新的connect,而不是"您需要安装最新的connect"。 @Shripad 显示的命令很有帮助,可能会向您显示您已经拥有 connect 1.0,太好了...但是,Express 目前还不支持 1.0 版本的 connect,请执行以下操作返回 0.5.10 版本:

npm install connect@0.5.10

1
我遇到了同样的错误,但当我回滚并且显示connect@0.5.10为活动状态时,我仍然遇到了同样的错误。这非常新,并且可能与今天早些时候升级有关。出于某种原因它还没有完全回滚。 - JohnAllen
今天很疯狂......请检查您是否正在使用express@1.0.7connect@0.5.10 - jpstrikesback
是的,npm uninstall connect@1.. 对我没用。这些文件仍然在 /usr/local/node/lib/connect 中,但我不敢开始删除它们。 - JohnAllen
这是一个关于require.paths的问题。Node在一个目录中检查express,该目录仍具有旧版本。我猜最新的NPM版本存储在require.paths中优先级较低的路径中。因此,即使NPM安装并显示express@1.0.7为活动状态,它也不会被Node使用。 :) - Shripad Krishna
当你回滚NPM时会发生什么?这是否有意义? - jpstrikesback
显示剩余2条评论

3
在我的情况下,注释掉包含connect的代码有所帮助。 //connect = require('connect');

3
你需要安装最新的connect(connect@0.5.10)。确保检查已安装并激活的connect版本: npm ls connect | grep active 引起错误的行涉及connect.Server。

2

请尝试使用jpstrikesback的答案,并确保按正确顺序安装依赖项:

npm install connect@0.5.10
npm install express@1.0.7

因为npm install express会安装最新版本的connect(如果没有可用的版本,它会中断),并且在express/1.0.7/package/lib/express/server.js中。

connect = require('connect')

看起来需要最新版本的connect,而不是你在应用中所需求的那个版本。


安装依赖项并没有像你建议的那样帮助我。不知何故,Express仍然安装了一个更新版本的Connect,并且似乎被使用了(?!)。为了说明这一点,这里是我的npm ls代码片段:http://tinypic.com/r/z1nxk/6 - nerdess

0

对于其他人(如果您的connect@1.0.1无法通过npm uninstall connect@1.0.1卸载),我删除了在/usr/local/lib/node/connect/找到的实际文件。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接