J'ai un ancien projet de test construit à l'origine avec Express 2.X. Je le déplace vers Express 4.x et j'essaie d'insérer Babel 6.x pour expérimenter avec les fonctionnalités ES6 côté serveur.
La mise à jour vers Express 4.x s'est bien passée. L'application d'origine fonctionne bien. Les problèmes surviennent lorsque je commence à ajouter des fonctionnalités ES6.
En particulier, je veux remplacer tous les require
et module.export
instructions avec ES6 import {...} from...
et export {...}
.
Problème: il me semble impossible d'importer des itinéraires à partir de fichiers externes dans le fichier app.js
fichier.
Ma app.js
charge les routes comme ceci:
import { indexRoute } from './routes/index_route';
app.use('/', indexRoute);
À l'intérieur index_route.js
J'ai:
"use strict";
import express from 'express';
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index_view', { title: 'Express' });
});
export { router }
Ce code source est OK pour Babel, mais le nœud se plaint au démarrage:
Router.use() requires middleware function but got a undefined
J'ai deux fichiers comme index_route.js
, chacun pour un groupe de routes, et AFAIS ils importent + modifient + exportent tous deux le même objet routeur. Dans tous les cas, l'exportation + l'importation effectuée à l'aide des mots clés ES6 renvoie undefined
.
Qu'est-ce que je fais mal? Suis-je en utilisant les mots clés ES6 sur les mauvais objets? Suis-je en utilisant des instructions obsolètes pour configurer les routes à l'intérieur app.js
?
Le problème est que vous exportez router
en tant qu'export nommé router
, mais que vous essayez de l'importer en tant que indexRoute
.
Vous devez soit renommer votre exportation:
export { router as indexRoute }
ou modifiez votre importation:
import { router as indexRoute } from './routes/index_route';
Essaye ça:
export default router;