因此,以下代码在开发中工作,在生产环境中运行时失败,错误为TypeError: Router.use() requires middleware function but got a Object
。到目前为止,我已经尝试了大约一百种不同的方法,结果相同。在开发中工作,而不是在生产中。
/server/routes.js
'use strict';
export class AppRoutes
{
constructor(app)
{
this.app = app;
return function initialize(app)
{
app.use('/mail', require('./api/mail'));
}
}
}
/server/app.js
var app = express();
import { AppRoutes } from './routes';
let router = new AppRoutes();
router(app);
// start the server here
// Expose app
export default app;
再次,在dev中工作,在ES6被编译并且应用程序在生产中运行时被破坏。提前感谢您对此事的任何想法。
更新
/node_modules/express/lib/router/index.js
的第458行引发错误。这是传递给Router.use()
的内容:
{ default:
{ [Function: router]
params: {},
_params: [],
caseSensitive: undefined,
mergeParams: undefined,
strict: undefined,
stack: [ [Object], [Object] ]
}
}
以下是我认为与错误相关的依赖项的版本(与开发中的prod相同):
节点v0.12.2
来自我的package.json
:
{
"express": "^4.13.3",
"babel-runtime": "^5.8.20",
"grunt-babel": "^6.0.0"
},
"devDependencies": {
"babel-core": "^5.8.34",
"babel-preset-es2015": "^6.1.18",
"babel-preset-stage-0": "^6.1.18"
}
答案 0 :(得分:4)
发生这种情况是因为已更改6.0中的默认导出行为。
现在,如果您想获得默认导出,则应隐式执行:
app.use('/mail', require('./api/mail').default);
您可以在MSDN
中查看有关此更改动机的答案此外,请将所有babel-*
个软件包保留在同一个主要版本中。 6.0预设将不适用于5.8 babel-core。