もともとExpress 2.Xでビルドされた古いテストプロジェクトがあります。私はそれをExpress 4.xに移動して、サーバー側でES6機能を試すためにBabel 6.xを挿入しようとしています。
Express 4.xへのアップデートは成功しました。元のアプリは正常に動作します。 ES6機能の追加を開始すると問題が発生します。
特に、require
とmodule.export
のすべての命令をES6 import {...} from...
とexport {...}
に置き換えたいと思います。
問題:外部ファイルからメインapp.js
ファイルにルートをインポートできないようです。
私のapp.js
は次のようにルートをロードします:
import { indexRoute } from './routes/index_route';
app.use('/', indexRoute);
index_route.js
の中:
"use strict";
import express from 'express';
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index_view', { title: 'Express' });
});
export { router }
このソースコードはBabelには問題ありませんが、ノードは起動時に文句を言います:
Router.use() requires middleware function but got a undefined
index_route.js
のような2つのファイルがあり、それぞれがルートのグループ用であり、AFAISは両方とも同じルーターオブジェクトをインポート+変更+エクスポートします。いずれの場合でも、ES6キーワードを使用して行われたエクスポート+インポートはundefined
を返します。
何が悪いのですか?間違ったオブジェクトにES6キーワードを使用していますか? app.js
内のルートを構成するために古い命令を使用していますか?
問題は、router
をexport _router
という名前でエクスポートしているが、indexRoute
としてインポートしようとしていることです。
エクスポートの名前を変更する必要があります:
export { router as indexRoute }
またはインポートを変更します。
import { router as indexRoute } from './routes/index_route';
これを試して:
export default router;