使用 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 ...
替换所有 require
和 module.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 路由器的主要内容,如果未能解决你的问题,请参考以下文章