Importación / exportación del enrutador Express utilizando las palabras clave de importación + exportación ES6 y Babel

Tengo un antiguo proyecto de prueba construido originalmente con Express 2.X. Lo estoy cambiando a Express 4.x e bash insertar Babel 6.x para experimentar con las características de ES6 del lado del servidor.

La actualización a Express 4.x salió bien. La aplicación original funciona bien. Los problemas surgen cuando comienzo a agregar características ES6.

En particular, quiero sustituir todas las instrucciones require y module.export con ES6 import {...} from... y export {...} .

Problema: parece que no puedo importar rutas desde archivos externos al archivo principal app.js

Mi app.js carga rutas así:

 import { indexRoute } from './routes/index_route'; app.use('/', indexRoute); 

Dentro de index_route.js tengo:

 "use strict"; import express from 'express'; var router = express.Router(); router.get('/', function(req, res, next) { res.render('index_view', { title: 'Express' }); }); export { router } 

Este código fuente está bien para Babel, pero el nodo se queja al inicio:

 Router.use() requires middleware function but got a undefined 

Tengo dos archivos como index_route.js , cada uno para un grupo de rutas, y AFAIS ambos importan + modifican + exportan el mismo objeto enrutador. En cualquier caso, la exportación + importación realizada con palabras clave ES6 devuelve undefined .

¿Qué estoy haciendo mal? ¿Estoy usando las palabras clave ES6 en los objetos incorrectos? ¿Estoy usando instrucciones obsoletas para configurar las rutas dentro de app.js ?

El problema es que está exportando un router como un router exportación llamado, pero tratando de importarlo como indexRoute .

Usted debe cambiar el nombre de su exportación:

 export { router as indexRoute } 

o cambiar su importación:

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

Prueba esto:

 export default router;