因此,以下代码在开发中有效,并且在生产环境中运行时失败,错误为TypeError: Router.use() requires middleware function but got a Object
。到目前为止,我必须已经尝试了大约一百种不同的方法,并且都获得了相同的结果。在dev中工作,不在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;
同样,在开发人员中工作时,ES6被编译并在生产环境中运行该应用程序时会中断。预先感谢您对此事的任何想法。
更新
错误在的第458行引发/node_modules/express/lib/router/index.js
。这就是传递给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"
}
发生这种情况是因为Babel在6.0中更改了默认导出行为。
现在,如果要获取默认导出,则应隐式执行此操作:
app.use('/mail', require('./api/mail').default);
您可以在另一个问题中看到有关此更改动机的答案
另外,所有babel-*
软件包都应使用相同的主版本。6.0预设不适用于5.8 babel-core。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句