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

我刚刚安装了sails@v0.9.16,express@4.0.0,compression@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) 

任何想法为什么?

Sails没有正式支持Express 4; Sails package.json的Express依赖项设置为明确的版本是有原因的! 您可以在这里使用其他的答案来尝试让你的Sails应用程序运行,但是你自己去做,直到我们更新了内核来使用新的Express。

我们正计划与Express团队联系,尝试在未来更好地同步发行版本,但目前我们正在努力争取Sails v0.10的稳定版本!

在Express 4.0中安装这些依赖关系是不够的。

您现在需要将它们包含在您的应用程序中

 var compression = require('compression'); 

然后使用它。

这里有相当不错的文章: 链接
也在这里: 链接

关于如何处理从expres 3.xx到4.xx的迁移

Express 4.0的中间件文档说 ,

从4.x开始,Express不再依赖于Connect。 之前包括的所有“Express”中间件现在都在单独的回购中。 请查看中间件列表 。 现在唯一包含的中间件是express.static()。

所以,你必须在package.json明确包含所有需要的中间件,作为依赖。 查看引用文本中的链接以了解所有中间件的存储库信息。

https://github.com/expressjs/body-parser/issues/31改变你的bodyParser()app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true }))也许你会得到正确的答案。 由于表示版本3到4,body-parser不在expression式中,所以应该独立安装。 可以帮助你。