web-dev-qa-db-ja.com

ES6のインポート+エクスポートキーワードとBabelを使用したExpressルーターのインポート/エクスポート

もともとExpress 2.Xでビルドされた古いテストプロジェクトがあります。私はそれをExpress 4.xに移動して、サーバー側でES6機能を試すためにBabel 6.xを挿入しようとしています。

Express 4.xへのアップデートは成功しました。元のアプリは正常に動作します。 ES6機能の追加を開始すると問題が発生します。

特に、requiremodule.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内のルートを構成するために古い命令を使用していますか?

13

問題は、routerをexport _routerという名前でエクスポートしているが、indexRouteとしてインポートしようとしていることです。

エクスポートの名前を変更する必要があります:

export { router as indexRoute }

またはインポートを変更します。

import { router as indexRoute } from './routes/index_route';
9
Bogdan Savluk

これを試して:

export default router;
4
LevCode