因此,下面的代码在开发中工作,并在生产环境中运行时失败,错误为TypeError: Router.use() requires middleware function but got a Object。到目前为止,我已经尝试了大约一百种不同的方法,结果都是一样的。在开发部门工作,而不是在prod工作。
/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中与dev中相同):
节点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"
}发布于 2015-11-16 10:31:53
之所以发生这种情况,是因为Babel在6.0中更改了默认导出行为。
现在,如果您想获得默认导出,您应该隐式地这样做:
app.use('/mail', require('./api/mail').default);您可以在another question中看到有关此更改的动机的答案。
同时,将所有babel-*包保持在相同的主要版本中。6.0预置将不能工作5.8Babel-核心.
https://stackoverflow.com/questions/33727189
复制相似问题