大多数中间件(如压缩)不再与Express捆绑在一起

时间:2014-04-16 06:49:30

标签: javascript node.js express sails.js

我刚刚安装了sails@v0.9.16,express@4.0.0,compress@1.0.1和compress@0.1.9(只是为了确保)。但是在运行sails lift

时我仍然遇到以下错误
/Users/myuser/myproject/backend/node_modules/express/lib/express.js:89
      throw new Error('Most middleware (like ' + name + ') is no longer bundle
            ^
Error: Most middleware (like compress) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.
    at Function.Object.defineProperty.get (/Users/myuser/myproject/backend/node_modules/express/lib/express.js:89:13)
    at Object.module.exports.express.customMiddleware (/Users/myuser/myproject/backend/config/passport.js:127:20)
    at Array.loadExpress [as 1] (/usr/local/lib/node_modules/sails/lib/express/index.js:162:25)
    at listener (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:462:46)
    at /usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:416:17
    at Array.forEach (native)
    at _each (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:32:24)
    at Object.taskComplete (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:415:13)
    at processImmediate [as _immediateCallback] (timers.js:330:15)

知道为什么吗?

4 个答案:

答案 0 :(得分:3)

仅在Express 4.0中安装这些依赖项是不够的。

您现在需要使用

将它们包含在您的应用中
var compression = require('compression');

然后使用它。

这里有一篇很好的文章:link
还有:link

如何处理从expres 3.x.x迁移到4.x.x

答案 1 :(得分:3)

Sails没有正式支持Express 4;有一个原因,Sails package.json中的Express依赖是set to an explicit version!您可以在此处使用其他答案来尝试运行您的Sails应用程序,但在我们更新核心以使用新的Express之前,您可以自己动手。

我们计划与Express团队联系,以便在将来更好地同步发布版本,但目前我们正在努力寻找稳定版本的Sails v0.10!

答案 2 :(得分:1)

Express 4.0's middleware documentation says

  

从4.x起,Express不再依赖于Connect。所有Express'以前包含的中间件现在在单独的回购中。请查看the list of middleware。唯一包含的中间件现在是express.static()。

因此,您必须在package.json中明确包含所有必需的中间件,作为依赖项。请参阅引用文本中的链接以了解所有中间件的存储库信息。

答案 3 :(得分:0)

https://github.com/expressjs/body-parser/issues/31 将您的bodyParser()更改为app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) 也许你会得到正确的答案。 从表达版本3到4开始,body-parser不在express中,你应该独立安装它。 可以帮到你。