使用 ES6 import + export 关键字和 Babel 导入/导出 Express 路由器

Posted

技术标签:

【中文标题】使用 ES6 import + export 关键字和 Babel 导入/导出 Express 路由器【英文标题】:Importing/exporting the Express router using ES6 import + export keywords and Babel 【发布时间】:2016-11-27 19:20:01 【问题描述】:

我有一个最初使用 Express 2.X 构建的旧测试项目。我将其移至 Express 4.x 并尝试插入 Babel 6.x 以在服务器端试验 ES6 功能。

Express 4.x 更新正常。原始应用程序运行良好。当我开始添加 ES6 功能时,问题就出现了。

特别是,我想用 ES6 import ... from...export ... 替换所有 requiremodule.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 是可以的,但是 node 启动时报错:

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

我有两个文件,例如index_route.js,每个文件用于一组路由,而 AFAIS 它们都导入 + 修改 + 导出相同的路由器对象。无论如何,使用 ES6 关键字完成的导出+导入返回 undefined

我做错了什么?我是否在错误的对象上使用了 ES6 关键字?我是否使用过时的指令来配置 app.js 内部的路由?

【问题讨论】:

您的导入和导出名称不匹配。试试import router from './routes/index_route'; 【参考方案1】:

问题是您将 router 导出为名为 export router,但尝试将其导入为 indexRoute

您应该重命名您的导出:

export  router as indexRoute 

或更改您的导入:

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

【讨论】:

【参考方案2】:

试试这个:

export default router;

【讨论】:

以上是关于使用 ES6 import + export 关键字和 Babel 导入/导出 Express 路由器的主要内容,如果未能解决你的问题,请参考以下文章

ES6中的export以及import的使用多样性

es6环境中,export与import使用方法

export,import, es6 export, es6 import

ES6模块功能

JavaScript import/export

ES6导入导出import | export | export default-使用案例