Таким образом, следующий код работает в разработке и не работает при работе в рабочей среде с ошибкой TypeError: Router.use() requires middleware function but got a Object
. Я, должно быть, уже пробовал это примерно сотню разных способов с тем же результатом. Работает в dev, а не в prod.Эксплуатационная маршрутизация с ES6-классами
/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 является transpiled и приложение является запустить в производство. Заранее благодарим за любые мысли по этому поводу.
обновление
Ошибка генерируется на линии 458 /node_modules/express/lib/router/index.js
. Это то, что передается в Router.use()
:
{ default:
{ [Function: router]
params: {},
_params: [],
caseSensitive: undefined,
mergeParams: undefined,
strict: undefined,
stack: [ [Object], [Object] ]
}
}
Вот версии зависимостей, я думаю, имеют отношение к ошибке (то же самое в прод как в 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"
}
Почему ваш конструктор принимает аргумент 'app' (который вы не передаете), а затем функция initialize также принимает аргумент' app', а не использует переменную экземпляра? Выберите один или другой и используйте его последовательно. В лучшем случае это запутанный дизайн. В худшем случае сделать ошибки программирования легко. – jfriend00
Один очевидный вопрос - описать все версии всего, что установлено как в dev, так и в производстве. Было бы также полезно увидеть, в какой строке кода произошла ваша ошибка, и посмотреть, что именно передается в 'Router.use()'. – jfriend00
Короткий ответ на ваш вопрос: «Потому что я просто стреляю слепо в этот момент». Я получу эту информацию для вас и немного обновлю свой вопрос. – MyCompassSpins