【问题标题】:express-validator usage with ESM modules使用 ESM 模块的 express-validator 使用
【发布时间】:2018-04-06 06:11:52
【问题描述】:

我尝试在带有 --experimental-modules 标志的 Node.js v8.7.0 中使用此语法导入 ESM 模块:

import { check, validationResult } from 'express-validator/check';
import { matchedData, sanitize } from 'express-validator/filter';

但是我收到以下错误:

(node:29028) ExperimentalWarning: The ESM module loader is experimental.
SyntaxError: The requested module does not provide an export named 'check'
    at checkComplete (internal/loader/ModuleJob.js:86:27)
    at moduleJob.linked.then (internal/loader/ModuleJob.js:69:11)
    at <anonymous>

使用 --experimental-modules 标志打开 ESM 模块的正确用法是什么?

我也使用@std/esm 包进行了测试。它只适用于我转cjs: true

【问题讨论】:

    标签: javascript node.js express node-modules express-validator


    【解决方案1】:

    使用这个...

    import validator from 'express-validator'
    const { check, validationResult } = validator

    【讨论】:

      【解决方案2】:

      现在,例如,在执行 from 'express-validator/check' 时,它会说 requires to express-validator/check are deprecated.You should just use require("express-validator") instead. ? 具有讽刺意味的是,CommonJS 模块在某种程度上也是如此。

      import validator from 'express-validator'
      const { body } = validator
      

      【讨论】:

        【解决方案3】:

        这是因为在 Node.js 中,通过 import 导入的 CommonJS 模块只有一个默认导出*。

        如果您要导入的模块不是 ES 模块(这是 express-validator 的情况),那么您所能做的就是这样:

        import checkAPIs from 'express-validator/check';
        import filterAPIs from 'express-validator/filter';
        
        const { check, validationResult } = checkAPIs;
        const { matchedData } = filterAPIs;
        

        * 来源:https://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c

        【讨论】:

        • 谢谢!它适用于 --experimental-modules@std/esm
        猜你喜欢
        • 1970-01-01
        • 2018-07-14
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 2021-01-23
        • 2014-08-05
        • 1970-01-01
        相关资源
        最近更新 更多