我刚刚安装了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)
知道为什么吗?
答案 0 :(得分:3)
仅在Express 4.0中安装这些依赖项是不够的。
您现在需要使用
将它们包含在您的应用中var compression = require('compression');
然后使用它。
如何处理从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中,你应该独立安装它。
可以帮到你。