javascript 使用ES6 import导入并使用单线Express路由器

up9lanfz  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(186)

使用ES6 Import的下面语句的一行等价物是什么

我的现有代码(使用require)
app.use('/c', require('./route/routesc')); // routes which are common
app.use('/d', require('./route/routesd')); // routes for Data Agent
app.use('/a', require('./route/routesa')); // routes for Admin
使用ES6导入的代码相同
import routesc from "./route/routesc.js"
import routesd from "./route/routesd.js"
import routesa from "./route/routesa.js"

app.use('/c', routesc); // routes which are common
app.use('/d', routesd); // routes for Data Agent
app.use('/a', routesa); // routes for Admin

我想知道是否有任何一个班轮为import
顺便说一句,我花了40分钟寻找这个答案,最后张贴在这里。

zte4gxcn

zte4gxcn1#

ONE-liner 的等效值为

import routesc from "./route/routesc.js"; app.use('/c', routesc); // routes which are common
import routesd from "./route/routesd.js"; app.use('/d', routesd); // routes for Data Agent
import routesa from "./route/routesa.js"; app.use('/a', routesa); // routes for Admin

没有办法将它们合并到一个语句中,import声明总是需要独立存在。

798qvoo8

798qvoo82#

/route文件夹中创建一个包含export { routesc } from './routesc.js'index.js文件。
然后执行import * as routers from './route'
现在您可以像app.use('/c', routers.routesc);一样使用它

o7jaxewo

o7jaxewo3#

你可以使用dynamic import函数来实现,它将返回一个Promise,该Promise将解析为一个模块名称空间对象(与import * as name from moduleName的结果相同)。
下面是一个示例实现。由于import是一个异步函数,并且app.use()不接受Promise,因此使用await运算符返回实现值(模块命名空间)而不是Promise。然后将其 Package 在方括号中,因为.default需要访问实现值,而不是Promise对象。

app.use('/c', ( await import('./route/routesc.js') ).default ); // routes which are common
app.use('/d', ( await import('./route/routesd.js') ).default ); // routes for Data Agent
app.use('/a', ( await import('./route/routesa.js') ).default ); // routes for Admin

再进一步,你甚至可以实现你自己的require函数,只要记住添加await操作符。

const require = async ( module ) => {
    return await import( module ).then( moduleNamespace => moduleNamespace.default );
}

app.use('/c', await require('./route/routesc')); // routes which are common
app.use('/d', await require('./route/routesd')); // routes for Data Agent
app.use('/a', await require('./route/routesa')); // routes for Admin

相关问题